2012-07-09 33 views
0

我正在設置多個報警,它們具有完全相同的PendingIntent對象,但它們的關閉時間是不同的。如果我通過向PendingIntent提供與PendingIntent相同的對象Intent取消一個警報,並將其傳遞給AlarmManager.cancel(),它是否會取消所有警報(即具有不同的開始時間)還是會顯示其他一些行爲?如何一次性取消具有重複PendingIntent的多個警報?

下面是代碼:

while(size != 0) 
{ 
    timeToSet = getNewTime(); //gets calendar object 
    Intent intent = new Intent(this, MyAlarmReceiver.class); 
    intent.putExtra("uniqueid", uuid); 
    intent.putExtra("vibrate", myalarm.getVibrate()); 
    intent.putExtra("important", myalarm.getImportant()); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),  
             0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeToSet.getTimeInMillis(), 604800000, pendingIntent); 

    size--; 
} 

所以意圖對象是相同的所有報警,但時間是不同的。 現在,當我取消這些警報:

Intent intent = new Intent(this, MyAlarmReceiver.class); 
intent.putExtra("uniqueid", uuid); 
intent.putExtra("vibrate", myalarm.getVibrate()); 
intent.putExtra("important", myalarm.getImportant()); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.cancel(pendingIntent); 

將所有的警報被取消?這就是我想要的。我可以在每個PendingIntent中使用不同的requestCode,但是如果它們全部被取消,那麼它會更好,因爲我不想維護和存儲這些額外的requestCodes

謝謝!

回答

3

如果您有預定義數量的警報,您可以爲每個警報設置一個獨特的requestCode(第二個參數getBroadcast)。但我不確定這是否適合你。如果您未指定requestCode,則所有警報將被視爲相等filterEquals,因此所有警報將被取消。

+0

這就是我想要做的,一起取消所有鬧鐘。謝謝! – 2012-07-09 08:59:54

相關問題