11

着信通知を読み上げる AccessibilityService があります。ICS 以下では正常に動作しますが、JB では動作しなくなりました。

以下はマニフェストとコードです。

<service
        android:name=".Services.InstantMessengerJb"
        android:enabled="@bool/is_post_jb"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        tools:ignore="ExportedService" >
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config" />

        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    SettingsClass.logMe(tag, "New event!");
    new AccessibilityProcessing(this, event);
}

@Override
protected void onServiceConnected() {
    if (isInit) {
        return;
    }
    SettingsClass.logMe(tag, "We are connected!");
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
    setServiceInfo(info);
    isInit = true;
}

前に述べたように、それは魅力のようにすべての preJB-Devices で動作しますが、JB ではサービスが開始されますが (「接続されています」と表示されます)、単一のイベントは発生しません。

コードに何か問題がありますか?

4

2 に答える 2

18

これは私がそれを機能させる方法です:

  1. サービス クラスをサブクラス化して、2 つのバージョンがあるようにします。

  2. res/values ディレクトリに bools.xml ファイルがあり、res/values-v16 ディレクトリにも 1 つある

  3. v16 では is_jelly_bean ブール値を true に設定し、res/values ディレクトリ バージョンでは is_not_jelly_bean を設定します。

  4. マニフェストには、このようなものがあります

    <service android:name=".service.MainRunningService" android:enabled="@bool/is_jelly_bean"
        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>
    
    <service android:name=".service.MainRunningServicePreJellyBean" 
        android:enabled="@bool/is_not_jelly_bean">
        <intent-filter >
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibilityservice" />
    </service>
    

res/xml ディレクトリにあるアクセシビリティ サービス xml ファイルで、accessibilityservice.xml を呼び出します。

その中に次のようなものがあります:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:description="@string/description_that_shows_on_the_accessibility_page" />
于 2012-08-20T17:49:37.790 に答える
2

Android 4.1.1 でこの問題が発生しました。アクセシビリティ サービスを無効にしてから再度有効にするまで、アクセシビリティ サービスはイベントを受信しませんでした。

この問題を解決するために、 と の両方 setServiceInfo()でアクセシビリティ サービスのパラメーターを定義しましたaccessibilityservice.xml

私の場合、Android のバージョンに依存する 2 つの異なるアクセシビリティ サービスを定義する必要はありませんでした。

于 2015-06-12T10:38:42.003 に答える