11

アクセシビリティ サービスを備えた完全に実行されているアプリケーションがあります。これまでのところ、期待どおりに機能しています。新しい更新版をビルドしようとした瞬間に問題が発生しました。ユーザー補助サービスに関連するコードは変更されていません。ただし、サービスは更新されたアプリケーションにバインドされなくなります。ログにエラーや警告はありません。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 )。この方法の欠点は、新しいアクセシビリティ サービスが別のサービスとして扱われるため、ユーザーがシステムで新しいアクセシビリティ サービスを再度有効にする必要があることです。理想的には、サービスが一度有効になっている場合、アプリの更新でこれを必要としないようにする必要があります。

だから私はまだ解決策に興味があります - より便利な解決策です。

前もって感謝します。

4

0 に答える 0