2011-08-16 98 views
1

我正在使用alarmManager在我的應用程序中設置多個警報並且遇到問題。當設置的PendingIntent這樣:Android:AlarmManager無法取消警報

timerAlarmIntent = PendingIntent.getBroadcast(myContext, 0, alarmIntent, 0); 
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent); 

凡requestCode設置爲0(在getBroadcast上下文旁),我可以使用:

myAM.cancel(timerAlarmIntent); 

取消我在應用程序中設置的報警任何金額。但是,我設置的每個鬧鐘都會覆蓋最後一個鬧鐘,因此只有一個鬧鐘會關閉。如果我設置requestCode唯一編號,如:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0); 
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent); 

如果我設置爲每個報警一個唯一的ID號碼使用for循環。這樣,所有的報警運行良好,但我不能解除警報,因爲當我只運行一個報警實際上將取消:

myAM.cancel(timerAlarmIntent); 

如何將requestCode設置爲一個唯一的編號,也不得不取消它的選項?

我結束了使用,以解決該問題的代碼是:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0); 
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 
intentArray.add(timerAlarmIntent); 
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent); 

要取消我設置了以下方法PendingIntents:

private void cancelAlarms(){ 
    if(intentArray.size()>0){ 
     for(int i=0; i<intentArray.size(); i++){ 
      myAM.cancel(intentArray.get(i)); 
     } 
     intentArray.clear(); 
    } 
} 

回答

1

你爲什麼不保存在timerAlarmIntent對象一個列表並在需要時在循環中取消它們?

問候, 斯特凡

+0

+1正是我要說:-) – Pikaling

+0

有時候,你只是需要有人拼出來的東西很明顯。謝謝你,你的建議奏效了。我用我最終使用的代碼更新了我的問題。 – ryandlf