我已经尝试了AccessibilityServiceConfig.xml的所有排列和组合。这是 AccecssibilityService 和 AccessibilityServiceConfig.xml 的代码。
这是我的代码:
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo rootNode = getRootInActiveWindow();
}
@Override
protected void onServiceConnected(){
super.onServiceConnected();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
info.notificationTimeout = 1000;
info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
this.setServiceInfo(info);
Log.e(TAG,"onServiceConnected: ");
}
AccessibilityServiceConfig.xml:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeWindowsChanged|typeWindowContentChanged|typeViewScrolled"
android:accessibilityFlags="flagReportViewIds|flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="false"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="1000"
android:canRequestEnhancedWebAccessibility="true">
</accessibility-service>
我一直在使用 Samsung S21 Ultra 来测试该应用程序。
我以前使用过一次辅助服务,所以我分享我的 xml 和代码文件(当我检查时它正在工作)。我使用 getRootInActiveWindow() 函数,如下所示: accessibility_service.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="200"
android:accessibilityFlags="flagDefault|flagRequestAccessibilityButton|flagIncludeNotImportantViews|flagReportViewIds|flagRetrieveInteractiveWindows|flagRequestFilterKeyEvents"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
/>
AccessibilityService.java
class MyAccessibilityService extends AccessibilityService {
public static instance;
@Override
public void onServiceConnected() {
instance = this;
//Your other code.
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo info = event.getSource();
AccessibilityNodeInfo root = instance.getRootInActiveWindow();
if (root != null) {
// Do whatever you want with root Node.
Log.d("NotNull","Root Node is not null");
}
}
}
注意: 当您在各个窗口之间转换时,很多时候 root 返回 null。这就是为什么我们要检查 root!=null,但大多数时候它不为 null。