如何使用TYPE_WINDOW_STATE_CHANGED的辅助功能服务

时间:2016-07-23 03:51:14

标签: android accessibility accessibilityservice

我尝试使用辅助功能服务来处理打开新活动或窗口时的事件。但它不起作用。

**首先,我实现了一个辅助服务类,如下所示:

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();
}

}

配置服务有两个选项:(1)使用.xml文件或(2)在源代码上使用dinamically配置。我有 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"

/&GT;

**然后,我在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>

在内置设备后,我转到“设置”并在“辅助功能”类别中启用。 但它不起作用!我该怎么办?

1 个答案:

答案 0 :(得分:0)

您必须在demo_accessibility.xml文件中添加android:canRetrieveWindowContent="true"