Android: всегда запускать верхнюю активность при нажатии на уведомление - PullRequest
0 голосов
/ 28 декабря 2011

РЕДАКТИРОВАТЬ : пожалуйста, обратите внимание: я полностью повторил свой вопрос.

У меня есть приложение с двумя Activites: A и B .Activity A - это MAIN.Итак, приложение запускается, и на экране появляется A .Пользователь нажимает на нее кнопку, и на экране появляется новый Activity B .

Итак, в моем «заднем стеке» теперь есть 2 действия: A и B .

Теперь я нажимаю клавишу «Домой», а затем нажимаю значок моего приложения на панели запуска: Activity B появляется на экране ( не A ), поскольку это главное занятие в моей задаче.

Теперь вопрос: как мне сделать Intent, чтобы аналогичным образом открыть текущую вершину Activity моей задачи?

Мне нужно использовать его в Notification: когда пользователь нажимает на мой Notification, на экране должно отображаться верхнее Activity этого задания, а не указанное.

Iперепробовал много флагов Intent, таких как SINGLE_TOP и другие, но я все еще не могу получить то, что мне нужно.

Кто-нибудь знает решение?

Ответы [ 3 ]

9 голосов
/ 30 декабря 2011

Что ж, потратив несколько часов на несколько дней, я нашел решение:

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);

Это способ запуска приложений, который также хорошо работает для уведомления о намерениях.

1 голос
/ 27 декабря 2012

Я использовал вот так.

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);

}
0 голосов
/ 28 декабря 2011

вы можете использовать Android: launchMode = "singleInstance". Пусть это будет работать.

...