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". Пусть это будет работать.

Другие вопросы по тегам