web-dev-qa-db-ja.com

デバッグの実行ごとにアクセシビリティサービスが無効になります

新しいデバッグインスタンスを開始するたびに、ユーザー補助サービスは無効な状態にリセットされます。

連続するデバッグ実行間で有効にしておく方法はありますか(サービスをデバッグするために毎回有効にするのは非常に長くて退屈なので)?

実際のデバイスとエミュレーターで同じ動作をします。
サービスに例外はありません。イベントハンドラーにコードなしでイベントを試しました。

ログに疑わしい行があります:

10:47:32.801 31669-31669/? E/AffinityControl: AffinityControl: registerfunction enter
10:47:32.821 3650-3690/? I/ActivityManager: Force stopping com.test.testaccessibilityservice appid=10241 user=0: from pid 31669
10:47:32.821 3650-3690/? I/ActivityManager: Killing 31271:com.test.testaccessibilityservice/u0a241 (adj 1): stop com.test.testaccessibilityservice cause from pid     
10:47:32.821 3650-3690/? W/ActivityManager: Scheduling restart of crashed service com.test.testaccessibilityservice/.MyAccessibilityService in 1000ms
10:47:32.821 3650-3690/? I/ActivityManager:   Force stopping service ServiceRecord{3f5e1fc4 u0 com.test.testaccessibilityservice/.MyAccessibilityService}

そのため、サービスは強制的に停止され、再起動されることはありません。

注:

  • 電話を再起動すると、サービスが開始されます。
  • ApiDemosサンプル とClockBackService(QueryBackServiceも)で同じ動作をします:

    18:07:15.871 3523-4251/? I/ActivityManager: Force stopping com.example.Android.apis appid=10242 user=0: from pid 19382
    18:07:15.871 3523-4251/? I/ActivityManager: Killing 16542:com.example.Android.apis/u0a242 (adj 1): stop com.example.Android.apis cause from pid 19382
    18:07:15.871 3523-4251/? W/ActivityManager: Scheduling restart of crashed service com.example.Android.apis/.accessibility.ClockBackService in 1000ms
    18:07:15.871 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{2f907c7b u0 com.example.Android.apis/.ApiDemos t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{190ca05c u0 com.example.Android.apis/.ApiDemos t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{27ada6e8 u0 com.example.Android.apis/.accessibility.ClockBackActivity t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force finishing activity 3 ActivityRecord{51f4c32 u0 com.Android.settings/.Settings$AccessibilitySettingsActivity t8248}
    18:07:15.881 3523-4251/? I/ActivityManager:   Force stopping service ServiceRecord{113bf024 u0 com.example.Android.apis/.accessibility.ClockBackService}
    18:07:15.891 19382-19382/? D/AndroidRuntime: Shutting down VM
    

変更せずにonStartCommandをオーバーライドして、START_STICKYを返そうとしました。

この古い未回答の質問 アクセシビリティサービスをデバッグする方法は? に非常に近いですが、私の場合、サービスは無効になっているように見え、サービスを停止して再起動する必要はありません。

私は記入しました AOSPに関するこのバグレポート

52

これは、問題にexplainおよびmitigateする可能性があります(ただし、Force stopの原因ではありません)。

Android 3.1の後、「システムはすべてのブロードキャストインテントにFLAG_EXCLUDE_STOPPED_PACKAGESを設定します。」したがって、3.1以降、すべてのアプリは起動時に停止します。なぜ ?。セキュリティ上の理由から。

フラグをオフにするFLAG_EXCLUDE_STOPPED_PACKAGESのルールがあります。

(1)アプリが設定からForce stopを取得した場合OR unresponsive appボタン、フラグが設定されます。

(2)アプリはPhone Storageにある必要があり、 [〜#〜] not [〜#〜] external storage(e.g。sdcard)にある必要があります。そうでない場合は、フラグが設定されます。 BOOT_COMPLETE外部ストレージがマウントされる前に送信されます。そのため、アプリが外部ストレージにインストールされている場合、BOOT_COMPLETEブロードキャストメッセージを受信しません。

(3)アプリケーションが実行されたことがない場合、フラグが設定されます(現在のブート状態に相対的ではありません; O)このブートでは決して意味しませんOR最後のブート状態でフラ​​グを無効にしました)。

re-enableForce stopレシーバーを想定したBOOT_COMPLETED後のサービスへの簡単な方法(必要に応じてスクリプト化)(再起動後は問題ないため、これがあると思います):

<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED"

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED

launchcontrols を参照してください

1
Jon Goodwin