Android 当我管理推送通知时,如何知道我的应用程序是否打开

Android 当我管理推送通知时,如何知道我的应用程序是否打开,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,使用Android,当我收到一个推送抛出我的GCMinentService的通知时,我想知道我的应用程序是否打开,因为如果用户单击通知时我的应用程序打开,我不想做任何事情,但如果应用程序关闭,我想打开应用程序。启动根活动(在清单中包含ACTION=MAIN和CATEGORY=LAUNCHER的应用程序)并添加意图。标记活动\u新任务。如果应用程序已处于活动状态(无论哪个活动位于顶部),这只会将任务带到最前面。如果应用程序未处于活动状态,它将以您的根活动启动它。在所有活动中定义这一点: 1.)定义

使用Android,当我收到一个推送抛出我的GCMinentService的通知时,我想知道我的应用程序是否打开,因为如果用户单击通知时我的应用程序打开,我不想做任何事情,但如果应用程序关闭,我想打开应用程序。

启动根活动(在清单中包含ACTION=MAIN和CATEGORY=LAUNCHER的应用程序)并添加
意图。标记活动\u新任务
。如果应用程序已处于活动状态(无论哪个活动位于顶部),这只会将任务带到最前面。如果应用程序未处于活动状态,它将以您的根活动启动它。

在所有活动中定义这一点: 1.)定义名为“检查运行模式”的静态最终布尔标志 2.)在所有活动中定义(重写)onResume()和onPause()方法。 3.)分别在onResume()和OnPause()方法中将此falg的值设置为“true”和“false”。 4.)收到推送通知时签出: A.若falg值为true,则表示应用程序处于放弃状态,所以在这种情况下不要执行任何操作 B如果标志值为false,则表示应用程序处于后台,这样您就可以在这种情况下打开应用程序

注意:falg必须是静态的final,因为您可以从任何活动中更改它,并在receiver类中访问它。我希望它对你有用

1 :
static boolean check_running mode = false;


-------------------
2:
@Override
protected void onResume() {
    super.onResume();

    check_running mode = true;
}

@Override
protected void onPause() {
    check_running mode = false;

    super.onPause();
}

---------------------
3 :
if (check_running mode) {
    showUserView();
}
else {
    showNotification();
}
publicstaticbooleaninsapprunning(上下文){
//检查第一个任务(前台任务)
//在返回的任务列表中
ActivityManager ActivityManager=(ActivityManager)上下文
.getSystemService(Context.ACTIVITY\u服务);
列表服务=活动管理器
.getRunningTasks(整数.MAX_值);
if(services.get(0.topActivity.getPackageName().toString())
.equalsIgnoreCase(context.getPackageName().toString()){
//您的应用程序正在后台运行
返回true;
}
返回false;
}

但当应用程序已处于活动状态时,我不想什么都不做,我不想将活动带到前台是的,如果应用程序已处于活动状态,它会将包含应用程序的任务带到前台,但不会再次启动根活动。这不是你想要的吗?不,当应用程序已经处于活动状态(打开,在前台运行)时,我不想这样做anything@Sababado你说的不是真的。如果您只是“启动”根活动,它不会将根活动带到最前面(即:活动堆栈的顶部)。这样做的目的是将整个任务(由根活动启动)置于前台,不管它处于何种状态。这意味着,如果应用程序中有6个活动,则按HOME键,然后下拉通知栏并选择启动应用程序根活动的通知,这将使该任务返回前台,并显示第6级活动。我有一个包含3个活动的应用程序,它使用通知启动/恢复我的应用程序。David的解决方案适用于我如果应用程序是从通知启动的,未来的每个通知都会按照我的要求恢复应用程序,但是如果我通过单击应用程序图标然后单击通知来启动应用程序,它将创建一个新实例,我不知道为什么,任务id看起来是一样的,知道为什么会这样吗?
public static boolean isAppRunning(Context context) {
    // check with the first task(task in the foreground)
    // in the returned list of tasks
    ActivityManager activityManager = (ActivityManager) context
            .getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> services = activityManager
            .getRunningTasks(Integer.MAX_VALUE);
    if (services.get(0).topActivity.getPackageName().toString()
            .equalsIgnoreCase(context.getPackageName().toString())) {
        // your application is running in the background
        return true;
    }
    return false;
}