2013-10-08 71 views
0

警報在我的代碼,我創建一個報警如下:取消在AlarmManager

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent("mypackage.START_MONITORING_SERVICE"); 
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
long timeForNextStart = System.currentTimeMillis() + elapsedTime; 
am.set(AlarmManager.RTC_WAKEUP, timeForNextStart, pi); 

要取消我這樣做了警鐘:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent("mypackage.START_MONITORING_SERVICE"); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
am.cancel(pendingIntent); 

我的問題是,這是否是正確的方法取消同一意圖的所有報警。該文檔說:

刪除任何具有匹配意圖的報警。任何類型的報警, 其意圖匹配此(由filterEquals(意圖)定義), 將被取消。

我不確定什麼定義了「匹配意圖」。如果我使用上面的代碼創建了多個警報,然後如圖所示執行取消操作,它是否會取消我創建的所有警報?

回答

0

您應該使用PendingIntent標誌==> PendingIntent.FLAG_CANCEL_CURRENT第四個參數創建pendingIntent實例方法。

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT); 
0

試試這個

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class); 
    PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0); 

    // Cancel alarms 
    try { 
     alarmManager.cancel(pendingUpdateIntent); 
    } catch (Exception e) { 
     Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
    } 
0

我的問題是,這是否是要取消的 相同意圖的全部報警,正確的方法是什麼?

我不知道你是否意識到requestCode應以下語法

public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags) 

在每個pendingIntent唯一我不完全知道什麼定義了一個「匹配的意圖」。

每個掛起的意圖映射與其提供的意圖觸發和每個請求代碼映射與意圖。

我們可以說它可以是相同的requestcode兩個不同的pendingIntent,理想情況下它有兩個不同的intents

記住,在這裏如果PendingIntent具有相同requestCode用於相同intent那麼它可以是覆蓋或取消根據int flags

如果我創建與上面的代碼多個報警,然後[執行的 取消如圖所示,它會取消我創建的所有警報嗎?

要創建一個多重報警,你必須給出不同的requestCodeintent相同。 如果要取消那些創建報警,那麼你必須根據requestCode

例如取消它們

To Create : 

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
For (int i= 0 ; i <5 ; i++){ 
PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, 
          new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.set(AlarmManager.RTC_WAKEUP, timeForNextStart, contentIntent); 

} 

To cancel : 

For (int i= 0 ; i <5 ; i++){ 
//Note here ' i ' is the requestCode which map each pendingIntent with there provided intent 
PendingIntent contentIntent = PendingIntent.getBroadcast(TaskReminder.this, i, 
          new Intent(),PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(contentIntent); 

}