2015-08-20 3 views
3

Мое приложение расширяет возможности 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 или есть причина, почему моя служба не возвращается, даже если когда я смотрю на странице Настройки доступа можно увидеть службу включена.

ответ

0

Существует альтернативный способ запроса, если служба доступности включена, я использовал описанный подход here - Detect if my accessibility service is enabled и, похоже, обошел проблемы, с которыми я сталкивался.

Смежные вопросы