使用Android AccessibilityService.getWindows()获取屏幕上的视图元素列表
是否可以使用AccessibilityService.getWindows()获取当前显示在屏幕上的视图元素的列表,包括它们的Z级别、哪个元素是最上面的元素以及它们所属的包名?如果是,怎么做 我不想构建一个全面的AccessibilityService,我只对getWindows()方法感兴趣,它可以在屏幕上获取窗口列表。我尝试了以下代码:使用Android AccessibilityService.getWindows()获取屏幕上的视图元素列表,android,window,android-view,accessibilityservice,Android,Window,Android View,Accessibilityservice,是否可以使用AccessibilityService.getWindows()获取当前显示在屏幕上的视图元素的列表,包括它们的Z级别、哪个元素是最上面的元素以及它们所属的包名?如果是,怎么做 我不想构建一个全面的AccessibilityService,我只对getWindows()方法感兴趣,它可以在屏幕上获取窗口列表。我尝试了以下代码: AccessibilityService myService = new AccessibilityService() { @Override pu
AccessibilityService myService = new AccessibilityService() {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
};
List<AccessibilityWindowInfo> windowList = myService.getWindows();
if (windowList.isEmpty()) {
Log.d(TAG, "Window list is empty");
} else {
Log.d(TAG, "Window list is not empty");
}
AccessibilityService myService=new AccessibilityService(){
@凌驾
AccessibilityEvent上的公共无效(AccessibilityEvent事件){
}
@凌驾
在中断时的公共无效(){
}
};
List windowList=myService.getWindows();
if(windowList.isEmpty()){
Log.d(标记“窗口列表为空”);
}否则{
Log.d(标记“窗口列表不为空”);
}
但是,窗口列表始终为空。我肯定我做错了什么,但我似乎找不到任何关于使用
getWindows()
的文档/示例。您不能以这种方式实例化辅助功能服务。易访问性服务可以方便地查看信息。允许他们随意从活动和其他类开始将是一个非常严重的安全风险。您必须向系统注册辅助功能服务,并从辅助功能服务设置菜单启动它。为此,您的清单文件中应该有一个如下所示的条目:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/service_config" />
</service>
<activity android:name=".MyServiceSettingsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.accessibilityservice.SERVICE_SETTINGS" />
</intent-filter>
</activity>
</application>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.yourpackage.MyServiceSettingsActivity"
/>
以及一个名为“service_config”的原始xml文件,该文件包含以下内容:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/service_config" />
</service>
<activity android:name=".MyServiceSettingsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.accessibilityservice.SERVICE_SETTINGS" />
</intent-filter>
</activity>
</application>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.yourpackage.MyServiceSettingsActivity"
/>
然后,通过打开服务开关,从启动对讲的同一区域启动服务 您不能以这种方式实例化辅助功能服务。易访问性服务可以方便地查看信息。允许他们随意从活动和其他类开始将是一个非常严重的安全风险。您必须向系统注册辅助功能服务,并从辅助功能服务设置菜单启动它。为此,您的清单文件中应该有一个如下所示的条目:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/service_config" />
</service>
<activity android:name=".MyServiceSettingsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.accessibilityservice.SERVICE_SETTINGS" />
</intent-filter>
</activity>
</application>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.yourpackage.MyServiceSettingsActivity"
/>
以及一个名为“service_config”的原始xml文件,该文件包含以下内容:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<service
android:name=".MyAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/service_config" />
</service>
<activity android:name=".MyServiceSettingsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.accessibilityservice.SERVICE_SETTINGS" />
</intent-filter>
</activity>
</application>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.yourpackage.MyServiceSettingsActivity"
/>
然后,通过打开服务开关,从启动对讲的同一区域启动服务 为了根据屏幕内容进行最佳操作,accessibilityservice应用程序能否访问原始显示像素地图并获得通知弹出窗口?为了根据屏幕内容进行最佳操作,accessibilityservice应用程序是否可以访问原始显示像素地图并获得通知弹出窗口?