There's something that android TalkBack does that I want to do too. Specifically it's to identify the view that the user touched. I made this so far:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) {
//This only shows the package of the activity that the view is in, I want to identify the view itself
Toast.makeText(this, "" + event.getSource().getPackageName(), Toast.LENGTH_LONG).show();
}
}
You can get the view's id, but I think you can only access the AccessibilityNodeInfo
associated with the view - I don't think you have access to the view itself. You can check the docs for more information on this.
// kotlin code
event.source.viewIdResourceName
// or
findFocusedViewInfo().viewIdResourceName
According to the docs :
Gets the fully qualified resource name of the source view's id.
Note: The primary usage of this API is for UI test automation and in order to report the source view id of an AccessibilityNodeInfo the client has to set the AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS flag when configuring the AccessibilityService.
the question is not clear, but maybe this will help you:-
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = event.getSource();
if (source == null) {
return;
}
List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId = source.findAccessibilityNodeInfosByViewId("YOUR PACKAGE NAME:id/RESOURCE ID FROM WHERE YOU WANT DATA");
if (findAccessibilityNodeInfosByViewId.size() > 0) {
AccessibilityNodeInfo parent = (AccessibilityNodeInfo) findAccessibilityNodeInfosByViewId.get(0);
// You can also traverse the list if required data is deep in view hierarchy.
String requiredText = parent.getText().toString();
Log.i("Required Text", requiredText);
}
}
also read this tutorial
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.