まず、以前に作成したアラームにアクセスする方法についての簡単なチュートリアル:
次のような一意の ID を使用してそれぞれを作成することにより、アラームを区別できます。
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
このアラームにアクセスするには、同じ一意の ID を持つ同じ PendingIntent を作成する必要があります。たとえば、次の例では、PendingIntent id 1234 で作成したアラームにのみアクセスします。その後、前のアラームをキャンセルしてリセットします。
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
考え方は単純です。ID を追跡し、それらを使用してそれぞれのアラームにアクセスします。同じ ID で複数のアラームを作成すると、最新のアラームが前のアラームをキャンセルします。
アプリケーションを起動するたびにアラームがアクティブかどうかを確認する代わりに、アクティビティのonCreate()
メソッドでアラームを再設定するだけで、主な問題になります。上で説明したのと同じ PendingIntent を使用します。これにより、アラームが以前に設定されているかどうかを確認する手間が省けます。目的はアラームを有効にしておくことなので、アプリケーションを起動するたびに以前に設定したアラームを上書きしても問題ありません。PendingIntent の作成には必ず同じ ID を使用してください。
過去の時間にアラームを設定しようとするとすぐにアラームがトリガーされるのを避けるために、アラームの時間がすでに経過しているかどうかを確認することを忘れないでください。
別のケースを考えてみましょう: デバイスの電源を切ると、すべてのアラームがキャンセルされます。これにより、再起動時に再度設定する以外に選択肢はありません。これを行うには、BroadcastReceiverを使用する必要があります。
この回答は、その方法について役立ちます。上で提案したように、BroadcastReceiver の onReceive() メソッドでアラームを再作成するだけです。