以下のコードでワンショットアラームを作成およびキャンセルします。アラームが解除されず、一定時間内に発火する場合があります。文字列timerTypeは常に同じです。
アラームが常にキャンセルされない理由を誰か説明できますか?
ありがとうございました。フランソワ
public static final void startOneShotAlarm(Context context, int minutes, String timerType) {
long period = 1000*60*minutes;
long firstTime = SystemClock.elapsedRealtime() + period;
Intent intent = new Intent(context, RepeaterDone.class);
intent.setData(Uri.parse(timerType));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Log.d("BAN", "RepeaterStart, >" + Uri.parse(timerType) + "< ctx="+context.toString() + "i=" + intent.toString());
// Schedule the alarm!
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, pendingIntent);
}
private static final void stopOneShotAlarm(Context context, String timerType) {
// Create the same intent, and thus a matching IntentSender, for the one that was scheduled.
Intent intent = new Intent(context, RepeaterDone.class);
intent.setData(Uri.parse(timerType));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Log.d("BAN", "stop, >" + Uri.parse(timerType) + "< ctx="+context.toString() + "i=" + intent.toString());
// And cancel the alarm.
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}