Ответ 1
Я положил это в манифест
android:launchMode="singleInstance"
Это исправило проблему для меня. Также этот ответ, который я не пробовал, который ссылается на другие интересные вещи.
Привет, у меня есть возможность получить уведомление, отображаемое для моей активности, и когда пользователь нажимает уведомление, которое приложение перезапускает. Однако я просто хочу, чтобы он снова не перезапускался. например. это веб-приложение, и я хочу, чтобы он вышел на передний план, когда пользователь выбирает уведомление... но не обновляет веб-страницу. Могу ли я поймать это намерение или я посылаю неправильное намерение? Обычно, если я нажимаю кнопку "домой" и нажимаю значок приложения, приложение выходит на передний план и не обновляет/перезапускает. Так что это поведение, которое я хочу. Любые идеи?
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(ns);
//2.Instantiate the Notification
int icon = R.drawable.notification_icon;
CharSequence tickerText = "My App"; // temp msg on status line
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.flags |= Notification.FLAG_ONGOING_EVENT;
//3.Define the Notification expanded message and Intent:
Context context = getApplicationContext();
CharSequence contentTitle = "Notification";
CharSequence contentText = "My app!"; // message to user
Intent notificationIntent = new Intent(this, HelloAndroid2.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText,
contentIntent);
//4.Pass the Notification to the NotificationManager:
final int NOTIFICATION_ICON_ID = 1;
mNotificationManager.notify(NOTIFICATION_ICON_ID, notification);
Я положил это в манифест
android:launchMode="singleInstance"
Это исправило проблему для меня. Также этот ответ, который я не пробовал, который ссылается на другие интересные вещи.
Если вам нужно не устанавливать свою активность на "singleInstance", тогда установите намерение уведомления следующим образом:
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Вы можете попробовать этот FLAG_ACTIVITY_REORDER_TO_FRONT (документ описывает именно то, что вы хотите)
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT
Intent notificationIntent = new Intent(this, HelloAndroid2.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Я бы рекомендовал установить флаг Intent.FLAG_ACTIVITY_SINGLE_TOP для этой конкретной ситуации, если вы используете android: launchMode = "singleInstance", это повлияет на поведение, когда вы вызываете другие намерения в своем приложении, например, используя facebook sdk, paypal sdk и т.д...
Объяснение просто здесь: ссылка
У меня есть другое решение для меня здесь:
//Resume or restart the app (same as the launcher click)
val resultIntent = Intent(context, MyLauncherActivity::class.java)
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER)
resultIntent.setAction(Intent.ACTION_MAIN)
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
val pendingIntent = PendingIntent.getActivity(context, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT)
builder.setContentIntent(pendingIntent) //builder is the notificationBuilder
Удалите это из манифеста из части действия .MainActivity, если она у вас есть:
android:noHistory="true"
Это фатально из-за невозможности возобновить приложение на устройствах Samsung (и других устройствах) с более новой версией Android, чем 7