2010-03-29 97 views
2

我創建類似下面的內容的通知:的PendingIntent衝突

Intent ni = new Intent(this, SomeActivity.class); 
    ni.putExtra("somestring", "somedata"); 
    PendingIntent contentIntent = 
     PendingIntent.getActivity(this, 0, ni, 
       PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT); 
    Context context = getApplicationContext(); 

    notification.setLatestEventInfo(context, 
      res.getString(R.string.app_name), 
      text, contentIntent); 

這裏的關鍵是在對意向通知的額外數據。一旦我點擊了通知,它就會啓動SomeActivity,它會啓動活動並提供額外的數據。

但是,如果我退出應用程序,請按住home按鈕,直到最近的活動列表出現,然後選擇再次打開該應用程序,額外的數據仍會通過。有沒有辦法讓我的數據通過只有如果應用程序是通過通知打開的,而不是從最近的活動列表中打開的?

回答

2

貌似我可以檢查,看看是否活動從最近的活動與此對話框啓動:

if((getIntent().getFlags() & 
     Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) { 
    // ignore extras 
} 
else { 
    // do not ignore extras 
} 

我不知道這是不是最好的方式,但它確實工作。

1

使用不同的Intent。例如,您可以爲某些自定義操作字符串添加<intent-filter>,並將其用於基於NotificationPendingIntent。換句話說,你不能改變最近的活動對話框,但你可以改變你的衝突。

+0

現在最近的活動對話框只顯示新的PendingIntent ...這意味着我有同樣的問題 - 最近的活動對話框仍然使用相同的額外數據啓動相同的活動。 – synic 2010-03-30 02:53:43

+0

只有當有問題的活動從'Notification'開始時才應該發生。 – CommonsWare 2010-03-30 12:10:09

+0

我想我不明白。即使我開始一個完全不同的活動,然後從它開始我的主要活動,我仍然必須使用額外的邏輯,他們仍然傳遞給新的活動。我試着製作這個「LauncherActivity」excludeFromRecents,但是這只是排除了整個應用程序,即使主要活動被指定爲不在清單中排除。 – synic 2010-03-30 14:21:14

1

嘗試用:爲每個通知

int NOTIFICATION_CODE = 1; 

PendingIntent contentIntent = 
      PendingIntent.getActivity(this, 
            NOTIFICATION_CODE, 
            ni, 
            PendingIntent.FLAG_UPDATE_CURRENT | 
            PendingIntent.FLAG_ONE_SHOT 
            ); 

變化NOTIFICATION_CODE值。