通过通知项重新打开后台应用程序

时间:2010-06-02 18:32:07

标签: android background notifications

我有一个带标签和通知栏条目的应用, 当我把它发送到后台(点击主页按钮) 并尝试通过单击重新打开应用程序 通知栏,应用程序重新启动(最后选择 标签丢失了。)

如果应用程序在,我按住主页按钮 背景并从那里选择它或点击 主屏幕上的应用程序图标,以前的状态是 默认情况下恢复(选择了正确的选项卡)

IMO通知的意图是错误的,但我是 不知道如何解决它。

简而言之:如何获取后台应用程序 单击通知条目时的前景?

THX!

6 个答案:

答案 0 :(得分:8)

把这两行。这将恢复当前暂停的活动:

notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);

答案 1 :(得分:4)

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 :(得分:2)

我遇到了同样的问题,并且急切地寻找答案,但这里的诀窍是:使用通知意图并使用通知意图在onCreate中打开一个空白活动,而不是尝试使用保存状态重新启动应用程序( )活动的方法,只需完成()它。这会将您带回到应用上最后一次查看的活动。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您是否按照lifecycle documentation?

中的建议实施onSaveInstanceState方法

当您暂停某个应用程序并立即返回该应用程序时,该应用程序仍可能在后台停留在内存中。但是,您不能依赖于此,因此您应该在每次进入后台时保存当前打开的选项卡状态,并在重新激活时将其恢复。

答案 5 :(得分:0)

在意图中使用两个标志

intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);