requestCodeパラメータgetBroadcast()について言及する必要があると思います。指定されたインテントに一致するすべてのアラームがキャンセルされることに同意します。ただし、キャンセル用のPendingIntentを定義するときに一意のrequestCodeを使用することで、アラームを一意にすることができます。したがって、同じインテントとrequestCodeを持つアラームのみがキャンセルされます。
int TIMER_1 = 1;
int TIMER_2 = 2;
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
Intent i = new Intent(this, AppReciever.class);
i.putExtra("timer", "one");
PendingIntent pending = PendingIntent.getBroadcast(this, TIMER_1, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = Calendar.getInstance();
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pending);
次に、これに従って PendingIntent が存在することを確認します。
PendingIntent pending1 = PendingIntent.getBroadcast(this, TIMER_2, i,
PendingIntent.FLAG_NO_CREATE);
boolean alarmUp = (pending1 != null);
alarmUpfalseになります(FLAG_NO_CREATE が存在しない場合、新しいものを作成しないように使用されることに注意してください)。同じrequestCodeで試してください:
PendingIntent pending2 = PendingIntent.getBroadcast(this, TIMER_1, i,
PendingIntent.FLAG_NO_CREATE);
alarmUp = (pending2 != null);
alarmUptrueになりますが、新しいインテントで試してみると、別のエクストラが含まれています。
Intent i2 = new Intent(this, AppReciever.class);
i2.putExtra("timer", "two");
pending2 = PendingIntent.getBroadcast(this, TIMER_1, i2,
PendingIntent.FLAG_NO_CREATE);
alarmUp = (pending2 != null);
alarmUpとは同じですが、余分なものは同じiでi2あるため、このアラームを削除できます。
am.cancel(pending2);