Я думаю, что параметр requestCode в getBroadcast()
должен быть упомянут. Я согласен, что все тревоги будут отменены в соответствии с заданным Намерением. Но аварийный сигнал можно сделать уникальным, используя уникальный requestCode при определении PendingIntent для отмены. Таким образом, будут отменены только те сигналы тревоги, которые имеют одинаковые значения intent и 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 существует в соответствии с this :
PendingIntent pending1 = PendingIntent.getBroadcast(this, TIMER_2, i,
PendingIntent.FLAG_NO_CREATE);
boolean alarmUp = (pending1 != null);
alarmUp
будет false (обратите внимание, FLAG_NO_CREATE используется, чтобы не создавать новый, если он не существует), поэтому попытайтесь использовать тот же requestCode :
PendingIntent pending2 = PendingIntent.getBroadcast(this, TIMER_1, i,
PendingIntent.FLAG_NO_CREATE);
alarmUp = (pending2 != null);
alarmUp
будет true , теперь попытка с новым намерением содержит другое дополнение:
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
также будет true , поскольку i
и i2
одинаковы, хотя дополнительные значения не совпадают, поэтому теперь вы можете удалить этот сигнал тревоги:
am.cancel(pending2);