Подтвердить что ты не робот

Намерение возобновить ранее приостановленную деятельность (вызванную из уведомления)

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

                    notification = new Notification(R.drawable.icon,
                            "Notify",
                            System.currentTimeMillis());
                    notification.setLatestEventInfo(this, "App name",
                            "App message",
                            PendingIntent.getActivity(
                                    this, 0,
                                    new Intent(this, Main.class),
                                    PendingIntent.FLAG_CANCEL_CURRENT));
                    notification.flags |= Notification.FLAG_ONGOING_EVENT;
                    nManager.notify(0, notification);

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

Я думаю, что это имеет какое-то отношение к PendingIntent, но я не могу найти, как заставить этот Intent возобновить ранее приостановленный экземпляр действия вместо создания нового экземпляра.

Спасибо.

4b9b3361

Ответ 1

Я узнал, как это сделать. Я добавил следующий код:

notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Теперь мой код выглядит следующим образом:

    notification = new Notification(R.drawable.icon,
            "Notify", System.currentTimeMillis());
    notification.setLatestEventInfo(this, "App name",
            "App message", PendingIntent.getActivity(this,
                    0, new Intent(this, Main.class)
                            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                    | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                    PendingIntent.FLAG_CANCEL_CURRENT));
    notification.flags |= Notification.FLAG_ONGOING_EVENT;

Ответ 2

Это помогает мне android:launchMode="singleInstance"

<activity
        android:name="com.mosis.automatskidnevnik.MainActivity"
        android:launchMode="singleInstance"
        android:label="@string/app_name" >
        ...

Ответ 4

Я решил ту же проблему, установив

android:launchMode="singleTask"

Ответ 5

Помимо правильного ответа @Jimix я бы изменил PendingIntent requestCode от 0 до ненулевого значения, как прокомментировал другой ответ . С другой стороны, есть известная ошибка в предыдущих версиях Android, в результате которой у меня было несколько отчаянных часов. Предлагаемое решение отлично отработало для меня отмена PendingIntent перед отправкой уведомления:

if (Build.VERSION.SDK_INT == 19) {
   getNotificationPendingIntent().cancel();
}