2013-10-31 43 views
0

我有這個方法,我打電話安排事件序列爲什麼我創建的PendingIntents都帶有相同的額外?

public void schedule(Event event) { 
    SharedPreferences preferences = context 
      .getSharedPreferences("myapp", 4); 
    int numberofintent = preferences.getInt("numberofintent", 0); 
    AlarmManager mgr = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
    if (event.dtstart > today.getTimeInMillis() && event.isreminder) { 
     Intent i = new Intent(context, ReminderPopUp01.class); 
     i.putExtra("id", Long.toString(event._id)); 
     i.setAction("com.blah.Action"); 
     Log.e("id in scheduler",Long.toString(event._id)); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent pi = PendingIntent.getActivity(context, 
       numberofintent, i, 0); 
     mgr.set(AlarmManager.RTC_WAKEUP, event.dtstart, pi); 

     numberofintent++; 
     SharedPreferences.Editor editor = preferences.edit(); 
     editor.putInt("numberofintent", numberofintent); 
     editor.commit(); 

    } 

但我得到一個奇怪的結果是:在不同的時間不同的PendingIntents的正確安排,

但他們隨身攜帶的所有相同額外的「ID」 !!! (但每個事件的ID是不同的)

這究竟是爲什麼?


編輯編輯編輯編輯編輯

請注意RequestCode始終是不同的....

回答

3

的Android認爲你的意圖是相同的,因爲他們只在演員不同。如果他們的行爲,數據,類型,類別和類別相同,則它們被認爲是等同的。爲了確保每個意圖都保持不變,您需要更改這五件事中的一件。

PendingIntentdocumentation

由於這種行爲的,重要的是要知道當兩個意圖被認爲是用於檢索的PendingIntent的目的是相同的。 人們犯的一個常見錯誤是創建了多個PenttentIntent對象,其Intents僅在其「額外」內容中有所不同,期望每次都獲得不同的PendingIntent。這沒有發生。用於匹配的Intent部分與Intent.filterEquals定義的部分相同。如果您使用兩個與Intent.filterEquals等效的Intent對象,那麼您將爲它們獲得相同的PendingIntent。

+0

謝謝Brigam,我明白了,在這種情況下我可以改變什麼來使意圖不同?正如你看到的我改變請求的代碼,但我所說的活動總是爲你的建議一樣...感謝 –

+0

三最後一段http://developer.android.com/reference/android/app/PendingIntent.html –

+0

@ Brigham沒有提供足夠的不同請求碼? –

1

PendingIntents緩存,當你把其中的數據是相似的。 如果你想確保數據被覆蓋和刷新,只需給它一個不同的參數。

相關問題