アクセシビリティ サービスを備えた完全に実行されているアプリケーションがあります。これまでのところ、期待どおりに機能しています。新しい更新版をビルドしようとした瞬間に問題が発生しました。ユーザー補助サービスに関連するコードは変更されていません。ただし、サービスは更新されたアプリケーションにバインドされなくなります。ログにエラーや警告はありません。manifest.xmlの一部は次のとおりです。
...
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
<application
android:name=".AppState"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:allowBackup="true">
// ... several activities, services and bootup receiver goes here...
<service android:name=".ForegroundMonitor"
android:label="@string/foreground_monitor_label"
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/serviceconfig" />
</service>
</application>
そして、ここにserviceconfig.xmlがあります:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeViewClicked|typeViewFocused|typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="1000"
android:canRetrieveWindowContent="false"
android:description="@string/foreground_monitor_about"
/>
ユーザー補助サービスはシステムに応じて登録され、開始または停止でき、アプリで変更してアプリを再インストールすると、サービスの設定が変更されます。
しかし、サービスはもうアプリにバインドされていません。のonServiceConnected
メソッドはForegroundMonitor
呼び出されません。
ここSOでいくつかの同様の質問を見つけました:
提案された唯一の解決策を試しましたが、私の場合はうまくいきません。
私のテストによると、この問題は Android 5.0.1 でのみ発生します。Android 2.3.3 では、アプリは正常に動作し、サービスは正常にバインドされています。
おそらくAndroidのバグであるこの問題の解決策を誰かが共有できますか?
アップデート
回避策を見つけました。たとえば、バージョン管理サフィックスを追加して、拡張するクラスの名前を変更するだけで十分ですAccessibilityService
(私の場合はForegroundMonitor )。この方法の欠点は、新しいアクセシビリティ サービスが別のサービスとして扱われるため、ユーザーがシステムで新しいアクセシビリティ サービスを再度有効にする必要があることです。理想的には、サービスが一度有効になっている場合、アプリの更新でこれを必要としないようにする必要があります。
だから私はまだ解決策に興味があります - より便利な解決策です。
前もって感謝します。