Намерение возобновить ранее приостановленную деятельность (вызывается из уведомления) - PullRequest
21 голосов
/ 09 марта 2011

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

                    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, но я не могу найти способ заставить это намерение возобновить ранее приостановленный экземпляр действия вместо создания нового экземпляра.

Спасибо.

Ответы [ 5 ]

22 голосов
/ 09 марта 2011

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

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;
9 голосов
/ 05 июля 2014

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

<activity
        android:name="com.mosis.automatskidnevnik.MainActivity"
        android:launchMode="singleInstance"
        android:label="@string/app_name" >
        ...
1 голос
/ 26 ноября 2014

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

android:launchMode="singleTask"
0 голосов
/ 08 апреля 2015

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

if (Build.VERSION.SDK_INT == 19) {
   getNotificationPendingIntent().cancel();
}
0 голосов
/ 09 марта 2011

При создании PendingIntent вы используете:

Main.this.getBaseContext ()

Вам следует использовать контекст действия по умолчанию, если вы хотите вернуться к тому же действию. Подробнее здесь:

Android - в чем разница между различными способами получения контекста?

...