啊哈,我只需要用PendingIntent.getActivities()
而不是getActivity()
。另外值得一提的是TaskStackBuilder
下面是一些代碼:
Intent backIntent = new Intent(ctx, MainActivity.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent intent = new Intent(ctx, ConversationActivity.class);
intent.putExtra("whatever", whatever);
final PendingIntent pendingIntent = PendingIntent.getActivities(ctx, UNIQUE_REQUEST_CODE++,
new Intent[] {backIntent, intent}, PendingIntent.FLAG_ONE_SHOT);
只是測試它。它像一個魅力。我最初懷疑如果應用程序已經運行,可能會有問題,並且您會去通知。即說你的活動堆棧(最頂層右邊):
[MainActivity] [SomeActivity]
,你點擊一個通知ConversationActivity
。你會得到:?
[MainActivity] [SomeActivity] [MainActivity] [ConversationActivity]
哦,原來你奇蹟般地得到
[MainActivity] [SomeActivity] [ConversationActivity]
這是我想要的東西,但我不知道它是如何做到這一點。我沒有對任何活動設置任何特殊選項。好吧!
不幸的是,這似乎不適用於我。我的MainActivity確實再次被推到導航棧上,並且它只對一個通知有效(我不會自動解僱它們)。有任何想法嗎? – bompf
@bompf,這可能是因爲在PendingIntent.getActivities中使用了PendingIntent.FLAG_ONE_SHOT。我建議'PendingIntent.FLAG_CANCEL_CURRENT'。 – Sam
謝謝;這對我有效,而'TaskStackBuilder'似乎不起作用。然而,你的代碼導致了一個奇怪的情況:如果我通過啓動器打開了'MainActivity',然後從通知中打開了操作,在按下返回按鈕返回到'MainActivity'之後,按下後退按鈕導致它返回'MainActivity'再次。像這樣:'[MainActivity] [MainActivity] [ConversationActivity]'。我通過將第二行代碼更改爲'backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)'來修復它。 – Sam