12

Android SDK を開発し、Android 11 Beta のテスト中に、まだ報告されていないように見える問題を発見しました。

Android 11 では、場所、マイク、カメラのアクセス許可に対して、新しい 1 回限りのアクセス許可が導入されました。このオプションを使用すると、ユーザーがアプリケーションを離れるとすぐに、権限が取り消されます (詳細については、こちらを参照してください)。

問題は、アプリがフォアグラウンドでなくなってからしばらくすると (アプリを強制終了する必要はありません。最小化するだけで十分です)、アプリが強制されたかのように、将来スケジュールされたすべてのアラームまたはジョブが削除されることです。殺された。これは、このレベルの権限でのみ発生します。他のレベルを拒否または提供すると、以前にスケジュールされたアラームまたはジョブが期待どおりに維持されます。これはベータ 3 ビルドで、RPB3.200720.005 ビルド番号の Pixel 2 エミュレーターで再現されています。このリポジトリでは、バグを再現するためのサンプル アプリを見つけることができます。

この 1 つのアクティビティ アプリは、次の 5 分でアラームを鳴らし、5 ~ 6 分の間にトリガーするジョブをスケジュールします。画面には 3 つのボタンがあり、それぞれが対応する許可要求をトリガーします。JobService クラスと BroadcastReceiver クラスは、トリガーされたことのみをログに記録します。この状況は、次の手順の後に再現できます。

  1. アプリが開始されるたびに、両方を実行adb shell dumpsys alarm | grep com.example.permissions.appadb shell dumpsys jobscheduler | grep com.example.permissions.appて、アラームとジョブの両方がスケジュールされていることを確認できます。
  2. いずれかのボタンをクリックして、1 回限りのアクセス許可レベルを付与します。
  3. アプリを最小化します (ホーム画面に移動するか、他のアプリを開くことができます);
  4. 約 1 分後、 と の両方adb shell dumpsys alarm | grep com.example.permissions.appを実行しadb shell dumpsys jobscheduler | grep com.example.permissions.appます。アラームとジョブは表示されなくなります。
  5. ジョブとアラームの両方の元のスケジュールされた時間 (システムの遅延を考慮して) を待機すると、それらがトリガーされないことが示されます。

同様の状況に遭遇した人はいますか?私たちの推測では、1 回限りのアクセス許可を取り消すために、これらの副作用を引き起こしている何らかの方法でアプリ プロセスが強制終了されています。また、 Android Issue Trackerに問題を提出しました。Google が回答した場合は、この投稿を更新し続けます。

4

2 に答える 2