我在Android中创建了Accessibility服务,它在4.2(Jelly Bean)和5.1(Lollipop)上完美运行,但在4.4(KitKat)上没有。
在KitKat上,它没有收到任何事件,也根本没有调用onAccessibilityEvent
。
我做错了吗? 这是我的实施:
accessibilityservice.xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackAllMask"
android:canRetrieveWindowContent="true"
android:description="@string/app_name"
android:notificationTimeout="100" />
myAccessibilityService.java
public class myAccessibilityService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent e) {
if (e.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
Log.d(TAG, "NOTIFICATION!!");
}
}
@Override
protected void onServiceConnected() {
Log.d(TAG, AccessibilityService Connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK;
info.flags = AccessibilityServiceInfo.DEFAULT;
info.notificationTimeout = 100;
setServiceInfo(info);
}
@Override
public void onInterrupt() {
Log.d(TAG, "myAccessibilityService onInterrupt Called");
}
}
的AndroidManifest.xml
<service
android:name=".myAccessibilityService"
android:enabled="true"
android:label="@string/app_name"
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>
当我进入设置并开启服务时,onServiceConnected
会被调用,它会显示并且正在运行但它从未调用onAccessibilityEvent
。
就像我说的,它适用于JellyBean和Lollipop。那可能是什么问题?
答案 0 :(得分:1)
创建新服务信息时,会删除服务信息的许多默认属性。我建议获取服务的服务信息,然后操作该对象。我不相信这会解决你的问题,但总的来说这是一个更好的主意。
为了澄清,我建议更换这一行:
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
有了这个:
AccessibilityServiceInfo info = this.getServiceInfo();
这样您就可以从任何XML属性,默认构造等维护默认配置。
答案 1 :(得分:0)
首先,在onServiceConnected()
中,删除除日志以外的所有行。
如果您的任何其他辅助功能服务具有相同的软件包名称,则您的辅助功能服务可能会错过事件。已注册在设备上安装的相同事件。
另外,
1)尝试检查TYPE_WINDOW_CONTENT_CHANGED等其他事件,看看KitKat设备是否收到它们。
2)尝试在不同版本的KitKat上运行(可能是版本问题)。