1

アクセシビリティ サービスを使用してイベントを監視するアプリがあります。ICS までのバージョンの Android では常に問題なく動作しますが、Jelly bean ではあまり運がありません。

ドキュメントに記載されているように、私は追加しました

android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"

マニフェスト ファイルで私のサービスに。これにより、アプリは xml の宣言型 xml メソッドを使用して正常に動作します。

問題は下位互換性にあります。ジンジャーブレッドなどのバージョンでは、次のエラーが発生しています。

07-15 22:15:56.090: E/ACRA(1168): Caused by: java.lang.SecurityException: Not allowed to start service Intent { cmp=com.example/.MainRunningService (has extras) } without permission android.permission.BIND_ACCESSIBILITY_SERVICE

互換性jarの最新リビジョンに更新しましたが、それが役立つことを期待していますが、それでもエラーが発生します。

古いバージョンと新しいバージョンの間で互換性を得る方法がわかりません。

マニフェストから BIND_ACCESSIBILITY_SERVICE を削除すると、アプリが Jelly Bean に表示されず、アクセシビリティをオンに切り替えることができなくなります。助言がありますか?

4

1 に答える 1

3

わかりました、マーク・マーフィーは私にいくつかのビットを提案しました、そしてこれはうまくいきました.

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

次に、bools.xml ファイルを res/values ディレクトリに配置し、res/values-v16 ディレクトリにも 1 つ配置します。

v16 で is_jelly_bean ブール値を true に設定し、res/values ディレクトリに is_not_jelly_bean を設定します。

次に、マニフェストに次のようなものがあります

<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>
于 2012-07-16T19:00:39.030 に答える