повторно открыть фоновое приложение через элемент уведомления - PullRequest
6 голосов
/ 02 июня 2010

У меня есть приложение с вкладками и панель уведомлений, когда я отправляю его в фоновый режим (нажмите на кнопку домой) и попробуйте заново открыть приложение, нажав на панель уведомлений, приложение перезапускается (последний выбран вкладка потеряна).

Когда я удерживаю кнопку домой, если приложение находится в фон и выберите его оттуда или нажмите значок приложения на рабочем столе, предыдущее состояние восстанавливается по умолчанию (выбрана правильная вкладка)

ИМО, цель уведомления неверна, но я не уверен, как это исправить.

Вкратце: как вернуть фоновое приложение на передний план, когда я нажимаю на запись уведомления?

ТНХ!

Ответы [ 6 ]

8 голосов
/ 17 мая 2011

Поместите эти две строки. Это возобновит приостановленную в данный момент активность:

notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
4 голосов
/ 29 марта 2012
Intent intent = new Intent(Application.getContext(), ActivityHome.class);
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.LAUNCHER");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Application.getContext().startActivity(intent);
2 голосов
/ 24 октября 2014

Я столкнулся с той же проблемой и яростно искал ответ, но вот хитрость: вместо того, чтобы пытаться перезапустить приложение с сохраненным состоянием с помощью намерения уведомления, откройте пустое действие с помощью намерения уведомления и в onCreate ) метод деятельности, просто завершите () его. Это вернет вас к последнему просмотренному действию в приложении.

1 голос
/ 25 марта 2013
public static boolean isApplicationRunningBackground(final Context context) {
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = am.getRunningTasks(am.getRunningAppProcesses().size());
    for (RunningTaskInfo runningTaskInfo : tasks) {
        if (runningTaskInfo.topActivity.getPackageName().equals(context.getPackageName())) {
            MyLog.i("UTIL", "packageName:" + runningTaskInfo.topActivity.getPackageName());
            MyLog.i("UTIL", "className" + runningTaskInfo.topActivity.getClassName());
            return true;
        }
    }
    return false;
}

Intent notificationIntent;
        if (Util.isApplicationRunningBackground(context)) {
            notificationIntent = new Intent(context, MainView.class);
        } else {
            notificationIntent = new Intent(context, Splash.class);
        }
0 голосов
/ 17 июня 2013

использовать два флага в намерении

intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
0 голосов
/ 02 июня 2010

Реализуете ли вы методы onSaveInstanceState, как рекомендовано в документации жизненного цикла?

Возможно, что когда вы приостанавливаете приложение и немедленно возвращаетесь к нему, приложение по-прежнему висит в памяти в фоновом режиме. Однако вы не можете зависеть от этого, поэтому вы должны сохранять состояние, например, открытую в данный момент вкладку, каждый раз, когда переходите в фоновый режим, и восстанавливать его при повторной активации.

...