ユーザーがSMSを受信すると起動するブロードキャストレシーバーがあります。ブロードキャストレシーバー内のコードは、アクティビティがフォアグラウンドにある場合、またはデバイスがスリープモードにある場合にのみ起動する必要があります。しかし、自分のアクティビティがフォアグラウンドにあるかどうかを検出するのに小さな問題があります。onResumeはブール値「isActive」をtrueに設定し、onStopはブール値「isActive」をfalseに設定します。(この方法でアクティビティがフォアグラウンドにあるかどうかを検出することは非常に論理的です)。
次のコードでは、画面がオフになっているか、アクティビティがフォアグラウンドにあるかを確認し、式の1つが真である場合は、次のコードを実行します。
@Override
public void onReceive(Context context, Intent intent) {
if(!pm.isScreenOn() || HandleActivity.isHandleActivityActive) {
// unnecessary code omitted
//start activity
intent = new Intent(MainService.this, HandleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //Clear top is necessary otherwise would be a lot of new activites (depends on received sms)
startActivity(intent);
}
}
しかし、アクティビティのライフサイクルで何が起こっているのかわかりません。私が初めてSMSを受け取ったとき、それは完全に機能しています。ブール値「isActive」の値は次のとおりです。
03-04 07:31:49.989: I/APP(7604): is handle activity active: true
03-04 07:31:50.169: I/APP(7604): is handle activity active: false
03-04 07:31:50.979: I/APP(7604): is handle activity active: true
2回目にSMSを受信したとき(アクティビティはまだフォアグラウンドにあります。SMSは読み取られませんでした)、次の値を取得しました。
03-04 07:32:04.828: I/APP(7604): is handle activity active: true
03-04 07:32:06.849: I/APP(7604): is handle activity active: false
「isActive」がfalseになっているため、「if」コードを実行できません。誰かが私を正しい方向に向けることができますか、何が間違っている可能性がありますか、または私の活動が前景か何かにあるかどうかを確認する方法。このため、過去2日間はイライラしています。
助けてくれてありがとう。