我覺得在getBroadcast()
的requestCode參數需要被提及。我同意所有的警報將被取消與給定的意圖匹配。但是,當定義用於取消的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根據this存在:
PendingIntent pending1 = PendingIntent.getBroadcast(this, TIMER_2, i,
PendingIntent.FLAG_NO_CREATE);
boolean alarmUp = (pending1 != null);
alarmUp
將假(注意FLAG_NO_CREATE用於不創建新的,如果不存在),所以嘗試使用相同requestCode:
PendingIntent pending2 = PendingIntent.getBroadcast(this, TIMER_1, i,
PendingIntent.FLAG_NO_CREATE);
alarmUp = (pending2 != null);
alarmUp
將真正,正以嶄新的意圖試圖包含不同的附加:
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);
來源
2013-02-26 15:25:27
HiB
我也在尋找與此問題類似的答案。我正在做與你非常相似的事情,但我似乎無法得到它的工作。我現在的理解是,你需要使用am.cancel(pendingIntent),這意味着你需要初始化一個相同的pendingIntent到你在這裏所做的。但是,這似乎並不適合我。任何能夠回答這個問題的人肯定會從我這裏得到讚揚:) – 2010-12-03 14:20:11