Как проверить, произошел ли сбой службы специальных возможностей (Android Pie теперь отображает эту информацию в настройках)? - PullRequest
1 голос
/ 08 марта 2019

Я обнаружил, что Android 9 теперь показывает информацию, если служба специальных возможностей перестала работать .

image

That was always a pain for developers who try to leverage accessibility API.

  • Accessibility looks like enabled, but service is stopped. And to get it back to work it is required to turn accessibility off and back on.

  • I would be glad if Google fixes that completely, but now they just show a hint that it's good to disable-enable it manually.

Not the best stuff, but at least something.

  • So, I've tried to find out how the system gets to know if the service is crashed. There happened to be a class called AccessibilityUtil и содержит метод hasServiceCrashed.

  • К сожалению, он проверяет скрытое поле crashed из AccessibilityNodeInfo, которое недоступно сторонним разработчикам (из-за отказа в отражении), а также в предыдущих версиях Android.

Так что мне интересно, есть ли альтернативный способ получения информации из системы, который разъясняет, что моя служба доступности аварийно завершена / перестала работать и требуется действие пользователя.Начиная с леденцов.Подсказки приветствуются.

1 Ответ

0 голосов
/ 08 марта 2019

Android, как правило, не позволяет приложениям работать, если они постоянно отказывают. Такое поведение для службы доступности, очевидно, может влиять на пользователей, которые зависят от службы, но, поскольку эти службы могут эффективно управлять пользовательским интерфейсом, наличие многократного сбоя может также сделать устройство непригодным для использования.

Мне не приходило в голову, что кто-то еще будет заинтересован в аварийном поле в AccessibilityServiceInfo. Я заполнил это поле, используя данные, доступные только системе, к сожалению. Я сравниваю список служб, которые включены, со списком тех, которые связаны.

Если вы заинтересованы в том, чтобы ваша служба не работала, вы, вероятно, могли бы сделать что-то подобное, отслеживая вызовы onBind и onUnbind и просматривая список включенных служб из AccessibilityManager.

...