デバイスがロックされているときにロック画面にアクティビティを表示する必要があるアプリを作成しています。デバイスがロックされているかどうか、またはデバイスのロック タイムアウトを検出する方法について、別の質問があります。みなさんご存知でしたらやり方を教えてください。 質問のハイパーリンク
そして、これが2番目の質問です。
サービスを開始する mainactivity(A) があります。サービスはレシーバーを登録して、デバイスの画面がオフになっているかどうかを確認します。デバイスが画面オフの場合、ロック画面の上にアクティビティ (B) が表示されます。これをシミュレートするために、アクティビティが閉じられた後にキーガードを無効にし、再度有効にします。
ただし、メインアクティビティ(A)が実行されている場合、画面またはonPauseステータスに表示されていても、画面がオフでアクティビティ(B)が表示されている場合、アクティビティ(B)でアクティビティ(B)を閉じた後finish()
、メインアクティビティデバイスのロックを解除した後に (A) が表示され、デバイスの画面がオフになる前にメイン アクティビティ (A) が画面に表示されない。
これは受信機のコードです
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("Receiver", "Screen ON");
} else {
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(context, activityB.class);
context.startActivity(i);
Log.d("Receiver", "Screen OFF");
}
}
多分私の英語は理解するのが苦手です。
理想の流れはこちら
mainactivity(A) -> サービスを開始するボタン サービスを登録する レシーバーを検出し、画面がオフの場合、アクティビティ B を開始します。 activityB -> ボタンfinish()
-> キーガードを表示 -> ロックを解除 -> デバイスがロックされる前の前のビュー/アクティビティを表示
ただし、mainactivity(A) -> サービスを開始する -> レシーバーをサービス登録する -> ホームボタンを押して、実行中のすべてのアプリ/アクティビティを最小化する -> 画面のタイムアウトを待つ -> レシーバーが画面オフを検出する -> アクティビティ B を開始する -> アクティビティ B を閉じる ->ロック解除 -> mainactivity(A) 表示
問題はi.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
、アクティビティ(B)がタスクとして開始されるため、メインアクティビティ(A)が実行されているときにアクティビティ(B)を閉じるとメインアクティビティ(A)に戻ることが原因だと思います
PS戻るボタンを押してメインアクティビティ(A)を閉じると、サービスが開始されるため、画面がオフのときでもアクティビティ(B)が表示され、アクティビティ(B)が閉じられるとメインアクティビティ(A)は表示されません。
どうもありがとうございました。