AccessibilityService работает наобум?

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

Когда я даю разрешение своему пользовательскому сервису специальных возможностей (переход к Accessibility-> MyApp -> ON), вызывается onServiceConnected, и некоторое время все работает нормально. Мое приложение получает события..

Но через некоторое время (например, час или около того) мое приложение перестает получать уведомления о новых уведомлениях. Я должен отключить AccesibilityService и снова включить его, чтобы работать.

Конечно, это неприемлемо, поскольку пользователь не будет делать это каждый раз.

Ниже мой код.

  @Override
protected void onServiceConnected() {
    super.onServiceConnected();


    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
    info.packageNames = null;
    info.feedbackType = AccessibilityServiceInfo.DEFAULT;
    setServiceInfo(info);

}

И Манифест.

 <!-- Accesibility Service Declaration below -->

    <service android:name="services.MyAccessibilityService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />

        </intent-filter>
    <meta-data android:name="android.accessibilityservice" android:resource="@xml/service_request" />

    </service>

Для тестирования я использовал HTC One M7, работающий на ОС Android KitKat. Итак, почему мое приложение перестает получать уведомления через некоторое время? Любая помощь могла бы быть полезна!


person rootpanthera    schedule 14.11.2015    source источник


Ответы (1)


Я считаю, что предлагаемое использование теперь заключается в использовании NotificationListener вместо AccessibilityService для обнаружения уведомлений.

https://developer.android.com/reference/android/service/notification/NotificationListenerService.html

person Nick Yelito    schedule 01.09.2016