Как перейти к действию из уведомления с FLAG_ACTIVITY_SINGLE_TOP - PullRequest
0 голосов
/ 10 июня 2019

Итак, у меня есть уведомление об услуге переднего плана, и когда пользователь нажимает, что я хочу перейти к одному из моих действий.ОК, похоже, что вам просто нужно указать PendingIntent для построителя уведомлений.

ОК, похоже, это работает нормально ... за исключением того, что я не хочу добавлять больше идентичных записей в стек активности, когда пользовательнажимает более одного раза.

Используйте Intent.FLAG_ACTIVITY_SINGLE_TOP ... ОК, так что теперь у меня есть что-то вроде этого:

    Intent intent = new Intent(context, MyAwesomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    Notification notification = new NotificationCompat.Builder(context, NotificationChannel.DEFAULT_CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_info)
            .setContentTitle("Title")
            .setContentText("Some nice text here.")
            .setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT))
            .build();

выглядит хорошо ... кроме того, что это не работает.Повторные касания просто добавляют новые записи в стек, а нажатие кнопки «Назад» показывает одно и то же действие несколько раз.Не приятно.

Как мне заставить его работать правильно?

1 Ответ

0 голосов
/ 10 июня 2019

Похоже, я не достаточно rtfm.

Я нашел рабочее решение на официальной странице документации Android: https://developer.android.com/training/notify-user/navigation

Исправленная версия, которая работает:

    Intent intent = new Intent(context, MyAwesomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntentWithParentStack(intent);

    Notification notification = new NotificationCompat.Builder(context, NotificationChannel.DEFAULT_CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_info)
            .setContentTitle("Title")
            .setContentText("Some nice text here.")
            .setContentIntent(stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT))
            .build();
...