PendingIntent をパラメーターとして受け取る AlarmManager.setInexactRepeating() メソッドを使用するアプリケーションを作成しています。
setAlarm() メソッドを呼び出すことでこれを開始します
public void setRepeatingAlarm() {
Intent intent = new Intent(this, AlarmReceiver.class);
String url = getAssembledUrl();
intent.putExtra("url", url);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}
stopAlarm() で停止します
private void stopRepeatingAlarm() {
alarmManager.cancel(pendingIntent);
pendingIntent.cancel();
}
うまく動作します。ただし、アクティビティが破棄され、ユーザーがアラームを停止することを決定した場合、現在のアクティビティの存続期間中に呼び出されなかった setRepeatingAlarm() メソッドで作成されるため、明らかに保留中のインテントは null です。
これを回避する正しい方法は何ですか?
Activity.onCreate() で保留中のインテントを作成することができ、それでこの問題は解決しますが、保留中のインテントがキャンセルされ、再度作成する必要があるため、アラームを再度開始することはできません (存在しない限り、私が知らない意図がキャンセルされたことを確認する方法)