2016-07-23 320 views
0

我尝试在打开新活动或窗口时使用辅助功能服务来处理事件。但它不起作用。如何通过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)配置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" 

/>

**。然后,我宣布它在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> 

建设中的设备后,我进入“设置”并打开“辅助功能”类别。 但它不起作用!我该怎么办?

回答

0

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