0

Android でアクセシビリティ サービスを作成しました。4.2 (Jelly Bean) と 5.1 (Lollipop) では完全に動作しますが、4.4 (KitKat) では動作しません。

KitKat では、イベントを受信せず、まったく呼び出しませんonAccessibilityEvent

私は何か間違ったことをしていますか?
これが私の実装です:

アクセシビリティサービス.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 で動作します。では、何が問題になるのでしょうか?

4

2 に答える 2

1

新しいサービス情報を作成すると、サービス情報の多くのデフォルト プロパティが削除されます。サービスのサービス情報を取得してから、そのオブジェクトを操作することをお勧めします。これで問題が解決するとは確信していませんが、一般的にはより良い考えです。

明確にするために、次の行を交換することをお勧めします。

AccessibilityServiceInfo info = new AccessibilityServiceInfo();

これとともに:

AccessibilityServiceInfo info = this.getServiceInfo();

XML プロパティ、デフォルトの構築などからデフォルトの構成を維持できるようにします。

于 2015-12-04T03:43:34.590 に答える
0

まず、 でonServiceConnected()、ログ以外のすべての行を削除します。

同じパッケージ名の他のアクセシビリティ サービスがデバイスにインストールされていて、同じイベントに登録されている場合、アクセシビリティ サービスはイベントを見逃す可能性があります。

また、

1) TYPE_WINDOW_CONTENT_CHANGED などの他のイベントをチェックして、KitKat デバイスがそれらを受信するかどうかを確認してください。

2) 別のバージョンの KitKat で実行してみてください (バージョンの問題である可能性があります)。

于 2015-12-11T08:59:58.783 に答える