1

我安排多意圖具體PendingIntents被髮送到廣播接收器。 每一個意圖之間的區別是什麼時候會被接收並額外的數據包含的時間。取消與AlarmManager

現在我需要允許用戶取消特定的報警。據AlarmManager.cancel()的javadoc,它採用filterEquals方法比較意圖:

http://developer.android.com/reference/android/content/Intent.html#filterEquals(android.content.Intent) 

現在的問題是,根據filterEquals,我所有的意圖是相同的。方法檢查「動作,數據,類型,類和類別」。

並且唯一的數據可能是意圖額外捆綁或作爲AlarmManager中的時間。 我試圖改變任何這些參數 - 例如使用:

intent.setData(Uri.withAppendedPath(Uri.EMPTY, "some_unique_data")); 

這將使每一個意圖唯一根據filterEquals方法,但改變的數據,以這樣的事情後,我的意圖沒有達到廣播接收器了。

根據filterEquals,我可以更改哪些特定數據位以使每個意圖唯一且仍然可以接收到我的簡單BroadcastReceiver?

也許我可以用任何方式修改我的接收器?

+0

有一個稱爲requestCode PendingIntent.getBroadcast方法內部的參數,但因爲它的文檔狀態:「發件人requestCode私人請求碼(當前未使用)。」。這是否意味着,該代碼沒有以任何方式使用,或者我可以將其指定爲用於取消未決意圖的唯一ID? – Kostas 2012-03-09 15:25:43

+0

你能接受你的答案嗎?這將從開放問題列表中刪除此問題,並可能幫助其他人解決類似問題。謝謝。 – 2017-09-18 14:58:28

回答

1

我遇到類似的問題跑了我的應用程序。 在我的應用程序中,我使用SQLite的數據庫來存儲說明每個報警,具有獨特的ROW_ID一起。

所以在我的鬧鐘列表視圖中,每一行都有一個相應的ROW_ID與它關聯。 如果用戶點擊一個特定的行,我只是通過這個ROW_ID到執行刪除操作

現在,我的所有報警用意圖它有自己的數據部分設置創建的方法爲:

Uri.parse(Constants.INTENT_PRE + ROW_ID); 

所以爲了刪除它們,我創建具有相同的數據(如上述,與唯一ROW_ID一起)而創建它的是使用的意圖。不用說,從「行爲,數據,類型,類和類別」中,只有「數據」部分對於我現有的每個PendingIntents都是不同的。

希望這會有所幫助!

+0

嘿。那麼,我不知道你在常量中有什麼,但是在我的程序中沒有INTENT_PRE,並且將數據設置爲例如Uri.parse(Constants.CONTENT_DIRECTORY + o.getId())仍然使它無法接收到broadcastReceiver。 – Kostas 2012-03-10 11:44:18

+0

常量是我自己的類,我存儲了一些不需要翻譯或不屬於UI的String常量。 – zeiger 2012-03-10 23:51:44

3

好了,所以我想它了。由於我的每一個報警都有其獨特的時間和對象ID,這是我如何創建我的PendingIntent:

return PendingIntent.getBroadcast(context, time*100000+o.getId(), toFire, 0); 

現在時間或者是數據24或15(事件之前我火我報警前24小時或15分鐘)和報警對象包含唯一的ID。因此,我添加了兩個並將其指定爲getBroadcast中的「requestCode」參數。這足以根據相同的數據製作獨特的意圖。 希望這可以幫助任何有同樣問題的人!