Служба специальных возможностей Android перестала работать через день или два на Oreo

Предыстория:

У меня есть класс, который простирается от AccessibilityService. Всякий раз, когда окно изменяется, вызывается следующая функция, которая дает мне имя приложения переднего плана.

@Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

}

Ниже приведена конфигурация, которую я установил:

 @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        //Configure these here for compatibility with API 13 and below.
        AccessibilityServiceInfo config = new AccessibilityServiceInfo();
        config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;

        if (Build.VERSION.SDK_INT >= 16) {   //Just in case this helps
            config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
        }
        setServiceInfo(config);
    }

AccessibilityService.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_explanation"
android:accessibilityEventTypes="typeWindowStateChanged|typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken|feedbackHaptic|feedbackAudible|feedbackVisual|feedbackGeneric|feedbackAllMask"
android:notificationTimeout="100" android:canRetrieveWindowContent="true" />

Проблема. Некоторое время он работает нормально, но через день или два внезапно перестает работать. Он не вызывает функцию onAccessibilityEvent(AccessibilityEvent event). Хотя служба специальных возможностей этого приложения включена, но все равно не показывает имя приложения при изменении окна.

Может не работать, если приложение выходит из спящего режима? Пришлось переустановить приложение поверх моей отладочной сборки и потом опять заработало но как долго.

Вопрос: как сделать так, чтобы оно всегда возвращало мне имя приложения при изменении окна?


person Ahmad Shahwaiz    schedule 12.06.2018    source источник


Ответы (1)


Просто перезапустите приложение. Это связано с тем, что Служба специальных возможностей управляется ОС Android, поэтому, если какая-либо вещь приведет к сбою службы, она будет остановлена ​​и перенесена для запуска в какое-то время в будущем, которое вы не можете контролировать. Так что вполне возможно, что ваш сервис был убит.

person Jerry Okafor    schedule 29.07.2018
comment
Нет способа убедиться, что Служба специальных возможностей всегда будет работать? - person Jesus Dimrix; 12.02.2020