Accessibility Service仅在应用前台生效问题求助
问题根源
你的无障碍服务仅在自身应用前台生效的核心原因是:accessibility_service_config.xml 中的 android:packageNames 属性仅指定了你自己的应用包名,系统会根据这个配置只将该包名应用产生的无障碍事件发送给你的服务,切换到其他应用时自然不会触发事件。这不是无障碍服务的设计预期,是配置错误导致的。
解决方案
根据你的需求(测试阶段检测当前打开的任意应用),直接移除 android:packageNames 属性即可,系统默认会让无障碍服务监听所有应用的事件。
修改后的 accessibility_service_config.xml 示例
<?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_service_description" android:accessibilityEventTypes="typeAllMask" android:accessibilityFlags="flagDefault" android:accessibilityFeedbackType="feedbackSpoken" android:notificationTimeout="100" android:canRetrieveWindowContent="true" android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
额外注意事项
- 如果你之后需要监听特定几个应用,再在
android:packageNames中用逗号分隔填写对应包名,注意不要重复填写同一个包名,且包名前后不要有空格(你原配置里包名前后有多余空格,也可能影响匹配)。 onServiceConnected中设置的AccessibilityServiceInfo会覆盖xml中的部分配置,比如你代码里指定了有限的几种事件类型,而xml里是typeAllMask,如果需要监听所有事件,可以保持xml的配置,或者在代码中设置info.eventTypes = AccessibilityEvent.TYPE_ALL_MASK。
内容的提问来源于stack exchange,提问作者Ramy
相关产品推荐
相关产品推荐

