2012-06-11 45 views
1

我似乎無法找到答案,但傳入匹配PendingIntent以從警報中刪除的標準是什麼?它基於com.blah.package.myclass這樣的名字,還是Extra的問題?如何正確取消待處理的警報

例如,我在做這樣的事情,所有的報警火一樣的意圖:

public void setAlarm(Context context, long nextAlarmMillis) { 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     intent.putExtra("alarm", this); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 1234 /* unused */, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     // Get the AlarmManager service 
     AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     am.cancel(sender); 
     am.set(AlarmManager.RTC_WAKEUP, nextAlarmMillis, sender); 
    } 

會發生什麼事是,Alarm類可以被改變等,並通過了作爲Extra。我取消了之前的鬧鈴,但我不確定它是否在做任何事情,或者是否還有剩餘的鬧鈴。

任何人都知道肯定嗎?

回答

3

以下是在AlarmManager文檔

任何報警提到的任何類型,其意圖匹配這一個(由filterEquals定義(意向)),將被取消的。

其中,所述filterEquals()定義爲:

確定是否兩個目的是意圖分辨率(濾波)的目的是相同的。也就是說,如果他們的行爲,數據,類型,類別和類別相同。這並不比較意圖中包含的任何額外數據。

我覺得最容易做的是你保留傳遞給AlarmManager的參考PendingIntent,並通過它取消。或者有一個工廠方法來構建這樣的pi。

+0

啊,錯過了filterEquals()。謝謝。 – Kirk

相關問題