![](/img/trans.png)
[英]Android Only compiling with API 20: Android 4.4 (KitKat Wear)
[英]Android AccessibilityService Event not received ONLY in KitKat (4.4)
我已經在Android中創建了可訪問性服務,該服務在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上使用。 那么可能是什么問題呢?
創建新的服務信息時,您會刪除許多服務信息的默認屬性。 我建議獲取服務的服務信息,然后操作該對象。 我不相信這會解決您的問題,但總體而言,這是一個更好的主意。
為了澄清,我建議交換以下行:
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
有了這個:
AccessibilityServiceInfo info = this.getServiceInfo();
這樣您就可以通過任何XML屬性,默認構造等維護默認配置。
首先,在onServiceConnected()
,除去Log之外的所有行。
如果您在設備上安裝了具有相同軟件包名稱並注冊了相同事件的任何其他可訪問性服務,則可訪問性服務可能會錯過事件。
也,
1)嘗試檢查其他事件,例如TYPE_WINDOW_CONTENT_CHANGED,並查看KitKat設備是否收到了它們。
2)嘗試在其他版本的KitKat上運行(可能是版本問題)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.