2012-09-25 92 views
1

這是一篇文章,要求我確認(或反駁)我認爲Android中的鬧鐘發生了什麼。此主題在博客和StackOverflow帖子中以某種頻率出現,但我沒有找到這兩點的清晰解釋(下文)。使用AlarmManager設置和取消鬧鐘(Android)

下面的代碼旨在設置和報警,然後解除它。這是行不通的。

Intent intent = new Intent(context, AlarmReceiver.class); 
    intent.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN); 
    PendingIntent sender = PendingIntent.getBroadcast(context, _id, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    AlarmManager am = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, now.getTime().getTime(), sender); 

    Intent toCancel = new Intent(context, AlarmReceiver.class); 
    toCancel.setAction(AlarmReceiver.ALERT_GUARD_CHECKIN); 
    PendingIntent pendingToCancel = PendingIntent.getBroadcast(context, 
      _id, toCancel, PendingIntent.FLAG_CANCEL_CURRENT); 
    am.cancel(pendingToCancel); 

它做的工作,如果,強似PendingIntent.FLAG_ONE_SHOT到PendingIntent.getBroadast的第一次調用(),我通過零來代替。我不相信這種行爲是有記錄的。

如果PendingIntent.getBroadast()(上面的_id)的第二個參數不相同,代碼也不起作用。我不相信這是記錄。在Android文檔中,第二個參數記錄爲「發件人的私人請求代碼(當前未使用)」。

問題是我是否正確描述了這種行爲,或者這些概括是否屬於現象。

回答

3

您必須通過PendingIntentcancel(),這相當於您用來註冊報警的那個。這意味着使用相同的意圖,標誌和請求代碼。與文檔可能導致您相信的相反,它實際上也會檢查請求代碼值。

+1

好的,謝謝你的確認。這是包含在文檔中的重要內容! –

0

您的Android Manifest中定義的鬧鐘有接收器嗎?

+0

是的,我收到的警報很好(或不是,如果我刪除它,如上所述)。 –