Мое приложение расширяет возможности AccessibilityService для мониторинга активного приложения. Чтобы обнаружить изменения в действиях, я должен зарегистрировать свою услугу и дать согласие на разрешение разрешения. В качестве удобства для пользователя я обнаруживаю, включена ли моя услуга, когда мое приложение запускается, если оно не включено, например. когда приложение установлено, я перенаправляю пользователя на страницу «Доступность настроек», чтобы позволить им включить службу. Следующий код проверяет, включена ли моя служба, параметр id является идентификатором моего сервиса, например. com.foo.bar/.MyService синтаксис:Android AccessibilityManager getEnabledAccessibilityServiceList возвращает пустой список при определенных обстоятельствах
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
для резервного копирования моего приложения, если мое приложение в настоящее время отображается при появлении приглашения на резервное копирование, тогда, когда резервная копия завершает основное действие моего приложения onCreate
, и метод isAccessibilityEnabled
проверяется и снова не видит, что моя служба уже включена.
Существует особый случай, мне нужно принимать во внимание при вызове getEnabledAccessibilityServiceList
или есть причина, почему моя служба не возвращается, даже если когда я смотрю на странице Настройки доступа можно увидеть службу включена.