Я пытаюсь представить уведомление, которое обрабатывается специальным действием, которое не входит в обычный поток приложений, и пытается получить обратную обработку стека «правильно», что означает:Как сохранить стек с уведомлением
- Если уведомление обрабатывается во время работы приложения, в текущем стеке должно появиться уведомление об активности уведомления, которое должно быть отправлено из уведомления, если мы будем в приложении. Обратите внимание, что это может означать, что приложение открыто.
- Если уведомление обрабатывается, когда приложение не запущено, активность уведомления должна появляться в основном (первоначальном) действии приложения.
До сих пор код, я использую, чтобы представить уведомление является:
/**
* 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
№ Уведомление генерируется службой. Действие содержимого открывает активность, которая не соответствует нормальному потоку приложения. Когда эта активность отклоняется, я хочу вернуться к активности приложения, которая была прервана. –