Намерение возобновить ранее приостановленную деятельность (вызванную из уведомления)
Я разрабатываю приложение, которое показывает уведомление пользователю. Цель уведомления состоит в том, чтобы предоставить пользователю возможность вернуться к активности, когда пользователь находится в другом действии. Я использую этот код в своем приложении для создания и отображения уведомления.
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 возобновить ранее приостановленный экземпляр действия вместо создания нового экземпляра.
Спасибо.
Ответы
Ответ 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" >
...
Ответ 3
При создании вашего PendingIntent вы используете:
Main.this.getBaseContext()
Вы должны использовать контекст Activity по умолчанию, если хотите вернуться к той же активности. Подробнее здесь:
Android - какая разница между различными методами для получения контекста?
Ответ 4
Я решил ту же проблему, установив
android:launchMode="singleTask"
Ответ 5
Помимо правильного ответа @Jimix я бы изменил PendingIntent
requestCode
от 0 до ненулевого значения, как прокомментировал другой ответ . С другой стороны, есть известная ошибка в предыдущих версиях Android, в результате которой у меня было несколько отчаянных часов. Предлагаемое решение отлично отработало для меня отмена PendingIntent
перед отправкой уведомления:
if (Build.VERSION.SDK_INT == 19) {
getNotificationPendingIntent().cancel();
}