我試圖提出一個通知,該通知由一個不在正常應用程序流程中的特殊活動處理,並試圖讓後端堆棧處理「正確」,意思是:如何保持通知的堆棧
- 如果在應用程序運行時處理通知,通知活動應出現在當前堆棧上,從通知返回應該讓我們留在應用程序中的位置。請注意,這可能意味着應用程序已開放。
- 如果在應用程序未運行時處理通知,則通知活動應顯示在應用程序的主要(初始)活動中。
到目前爲止,我使用呈現通知的代碼是:
/**
* Show (or update) a notification for the current message set.
*
* @param showNotification true to use a high priority notification which will be immediately
* displayed (as opposed to just added to the status bar)
*/
private void createOrUpdateNotification(boolean showNotification) {
Message oldest = messages.get(0);
Message newest = messages.get(messages.size() - 1);
// Create the notification
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
// Set notification data and appearance
.setContentTitle(title)
.setContentText(newest.message)
.setSmallIcon(smallIcon)
.setWhen(newest.when)
.setColor(ContextCompat.getColor(context, R.color.primary_color))
// Set notification options
.setAutoCancel(true)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setPriority(showNotification ? NotificationCompat.PRIORITY_HIGH : NotificationCompat.PRIORITY_LOW)
.setDefaults(NotificationCompat.DEFAULT_VIBRATE)
.setOnlyAlertOnce(!showNotification);
// Set up the action if the first (oldest) message has an intent builder
if(oldest.intent != null) {
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context.getApplicationContext());
stackBuilder.addNextIntent(oldest.intent);
builder.setContentIntent(stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT));
}
NotificationManagerCompat.from(context).notify(notificationId, builder.build());
Log.i("notification created");
}
對於澄清,Message.intent
是一個單一的目的,設置爲打開該通知處理活動。
我的問題是,如果應用程序當前正在運行並且在打開通知時打開,則應用程序將關閉,並且在空堆棧和應用程序的背堆棧上顯示的通知將被清除。
我的理解是,如果內容意圖是包含單一意圖的待處理意圖,則此期望行爲應該是自動的。
我錯過了什麼?
我理解你的問題嗎?您想要顯示通知並停止在顯示通知時發佈通知的線程?那是你要的嗎? – Distjubo
否。通知由服務生成。內容操作會打開超出正常應用程序流程的活動。當該活動被解僱時,我想回到被中斷的擁有應用程序活動。 –