Как использовать службу доступности с TYPE_WINDOW_STATE_CHANGED

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

**Во-первых, я реализую класс службы специальных возможностей, который выглядит следующим образом:

public class DemoAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    System.out.println(" DemoAccessibilityService change= " + event.getAction());

}

@Override
public void onInterrupt() {
}

@Override
protected void onServiceConnected() {
    System.out.println("DemoAccessibilityService connected");
    super.onServiceConnected();
    AccessibilityServiceInfo config = new AccessibilityServiceInfo();
    config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
    config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;

    if (Build.VERSION.SDK_INT >= 16)
        config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;

    setServiceInfo(config);
}

@Override
public void onDestroy() {
    System.out.println("DemoAccessibilityService destroy");
    super.onDestroy();
}

}

Существует 2 варианта настройки службы: (1) использовать файл .xml или (2) динамически настраивать исходный код. У меня был файл конфигурации demo_accessibility.xml:

<accessibility-service
 xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools"
 android:accessibilityEventTypes="typeWindowStateChanged"
 android:accessibilityFeedbackType="feedbackGeneric"
 android:accessibilityFlags="flagIncludeNotImportantViews"
 tools:ignore="UnusedAttribute"
 android:packageNames="com.android.systemui"

/>

** Затем я объявил это в AndroidManifest.xml следующим образом:

<service android:name="demo.android.accessibility.DemoAccessibilityService"
             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/demo_accessibility"/>
    </service>

После встраивания устройств я захожу в «Настройки» и включаю категорию «Доступность». Но это не работает! Что я должен делать?


person Duc Minh.T    schedule 23.07.2016    source источник


Ответы (1)


вам нужно добавить android:canRetrieveWindowContent="true" в файл demo_accessibility.xml

person Kunal    schedule 24.11.2016
comment
попробую отпишусь о результате - person Duc Minh.T; 20.04.2018