我的应用扩展了Android的AccessibilityService,以监控当前有效的应用。为了检测活动的变化,我必须注册我的服务并让用户同意允许这些许可。为了方便用户,我检测我的应用程序启动时当前是否启用了我的服务,如果没有启用,例如安装应用程序后,我将用户重定向到“设置辅助功能”页面,以允许他们启用该服务。以下代码检查我的服务当前是否已启用,id参数是我的服务的id,例如com.foo.bar/.MyService语法:
private boolean isAccessibilityEnabled(String id) {
AccessibilityManager am = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityEvent.TYPES_ALL_MASK);
for (AccessibilityServiceInfo service : enabledServices) {
if (id.equals(service.getId())) {
return true;
}
}
return false;
}
我已经看到两种情况,即使我知道该服务已启用,此检查也会失败。首先,如果我从Android Studio调试我的应用程序,则此操作失败并且enabledServices
为空,如果我运行(而不是调试)它完美运行并返回enabledServices
中的单个条目。我注意到失败的第二个场景是当我运行adb backup
命令来备份我的应用程序时,如果我的应用程序当前可见,当备份提示出现时,则备份完成我的应用程序的主要活动{{1执行并检查onCreate
方法,再次看不到我的服务已启用。
在调用isAccessibilityEnabled
时是否需要考虑一个特殊情况,或者是否有理由不返回我的服务,即使我查看“辅助功能设置”页面时我可以看到服务 已启用。
答案 0 :(得分:0)
有一种替代方法可以查询是否启用了辅助功能服务,我使用了here - Detect if my accessibility service is enabled所描述的方法,它似乎解决了我遇到的问题。