我希望在AccessibilityService中能够知道用户何时按下任何系统键,特别是返回键。我已经重写了onKeyEvent方法,但它完全没有反应,但我可以从onAccessibilityEvent中获取所有事件。
@Override
public boolean onKeyEvent(KeyEvent event) {
Log.e(TAG, "------------------- onKeyEvent ----------------------------");
return super.onKeyEvent(event);
}
以下是我的配置文件,我正在监视AccessibilityService子项目和实际应用程序包。
包含AccessibilityService的子项目的Manifest.xml。
<?xml version="1.0" encoding="utf-8"?>
...
<service android:name="com.foo.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/accessibilityservice" />
</service>
accessibilityservice.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:tools="http://schemas.android.com/tools"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagIncludeNotImportantViews"
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/emachine_accessibility_service_description"
android:settingsActivity="com.foo.services.MyAccessibilityService"
tools:ignore="UnusedAttribute"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:canRequestTouchExplorationMode="true"/>
是的,com.foo.services.MyAccessibilityService 在系统辅助功能设置下已经处于“开启”状态。
添加了
android:canRequestFilterKeyEvents="true"
android:canRequestTouchExplorationMode="true"
在上面的 accessibility.xml 中,相应的onServiceConnected也是以编程方式添加的。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
info.flags |= AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
info.flags |= AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS;
info.flags |= AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT;
}
没有积极的结果。