I have created Accessibility service in Android and it works perfectly on 4.2 (Jelly Bean) and 5.1 (Lollipop) but not on 4.4 (KitKat).
On KitKat, it doesn't receive ANY events and doesn't call onAccessibilityEvent
at all.
Am I doing something wrong?
Here's my implementation:
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>
When I go to settings and turn the service on, onServiceConnected
is called and it says it's on and running BUT it never called onAccessibilityEvent
.
Like I said, it works on JellyBean AND Lollipop. So what could be the problem?