我使用AlarmManager來設置重複的意圖,但它已經造成了一些小麻煩,所以希望任何人都可以提供幫助。如何創建不同的pendingintent所以filterEquals()返回false?
摘要
有2個未決意圖。一個運行在1000,另一個運行在2000,每天。每個數據庫都包含來自數據庫的行標識以用於標識。該代碼看起來是這樣的:
Intent i = new Intent(mContext, ScheduleReceiver.class);
i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId);
PendingIntent pi =PendingIntent.getBroadcast(...);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
刪除:
的問題是,當我們需要刪除其中之一。刪除掛起的意圖的正確方法是設置相同的一個,然後從AlarmManager中調用取消。
Android文檔:
public void cancel (PendingIntent operation)
具有匹配的意圖刪除任何警報。任何類型的意圖與其匹配的警報(由filterEquals(Intent)定義)將被取消。public boolean filterEquals (Intent other)
確定是否兩個目的是意圖分辨率(濾波)的目的是相同的。也就是說,如果他們的行爲,數據,類型,類別和類別相同。此不會比較意圖中包含的任何額外數據。
所以在上面的例子,如果我做相同的意圖再取消,上述兩種意圖將被取消,因爲他們是來自同一個類/同樣的動作等(除了「額外」數據是rowId,但filterEquals
不關心額外的數據)。
有沒有解決方法?
謝謝!它會工作。不知道這很簡單。 :) – markbse
我希望他們會更新文檔,因爲當你試圖讓某些東西工作時,它說requestCode的「未使用」真的很嚇人。 –
小心:requestCode被定義爲int,而通常(sqlite)行ID很長。 – HaimS