Android: всегда запускать верхнюю активность при нажатии на уведомление
РЕДАКТИРОВАТЬ: пожалуйста, обратите внимание: я полностью повторил свой вопрос.
У меня есть заявление с двумя Activites
: А и Б.Activity
А это MAIN
, Итак, приложение запускается, и А появляется на экране. Пользователь нажимает на нее кнопку, и новый Activity
B появляется на экране.
Итак, в моем "заднем стеке" теперь есть 2 действия: A и B.
Теперь я нажимаю клавишу "Домой", а затем нажимаю значок моего приложения на панели запуска: Activity
На экране появляетсяB (не A), так как это главное занятие в моей задаче.
Теперь вопрос: как я могу сделать Intent
аналогичным образом открыть текущую вершинуActivity
моей задачи?
Мне нужно это использовать в Notification
: когда пользователь нажимает на мой Notification
, Топ Activity
этой задачи должен появиться на экране, а не указан.
Я пробовал много флагов I ntent, таких как SINGLE_TOP
и другие, но я все еще не могу получить то, что мне нужно.
Кто-нибудь знает решение?
3 ответа
Ну, потратив несколько часов несколько дней, я нашел решение:
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Это способ запуска приложений, запускающий приложения, и он хорошо работает и для уведомления о намерениях.
Я использовал как это.
private void notifyUser(Context context) {
notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence text = "Test Notification";
Notification notification = new Notification(R.drawable.icon, text,
System.currentTimeMillis());
Intent resultIntent = new Intent(context, StartActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(GeneralSettingsActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT);
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(context, "Title", text,
resultPendingIntent);
notificationManager.notify(AUTOSYNC_COMPLETED_NOTIFICATION,
notification);
}
Вы можете использовать Android:launchMode="SingleInstance". Пусть это будет работать.