アラーム マネージャーとブロードキャスト レシーバーを使用する目覚まし時計アプリがあります。アプリは 1 つのアクティビティと 4 つのフラグメントです。アラームが鳴ると、onReceive メソッドがインテントをメイン アクティビティに送信します。メイン アクティビティは、メソッド onNewIntent でこのインテントを受け取り、正しいフラグメントに移動します。アプリを閉じた後にアラームが鳴った場合を除いて、すべて正常に動作します。
アプリを破棄すると、アラームは鳴り続け、ブロードキャスト レシーバーからのインテントが起動しますが、onNewIntent メソッドはインテントをキャッチし、アプリを正しいフラグメントに移動します。
これは、メイン アクティビティに移動するブロードキャスト レシーバー クラスにあるインテントです。
Intent alarmIntent = new Intent( context, ClockActivity.class );
alarmIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.putExtra("Alarm Name", receivedAlarm.getmName());
context.startActivity(alarmIntent);
これは、アプリが閉じられたときにアラームが呼び出されたときに呼び出されないメインアクティビティの onNewIntent メソッドです。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
PhraseFragment phraseFragment = new PhraseFragment();
String activeName = intent.getStringExtra("Alarm Name");
Bundle args = new Bundle();
args.putString("activeName", activeName);
phraseFragment.setArguments(args);
getFragmentManager().beginTransaction()
.replace(R.id.container, phraseFragment)
.addToBackStack("phrase")
.commit();
}