使用Android,当我收到通知推送我的GCMIntentService时,我想知道我的应用程序是否打开,因为如果我的应用程序打开时用户点击通知我想什么都不做,但是如果app很接近我想打开应用程序。
答案 0 :(得分:8)
启动根活动(清单中具有ACTION = MAIN和CATEGORY = LAUNCHER的活动)并添加Intent.FLAG_ACTIVITY_NEW_TASK
。如果应用程序已经处于活动状态(无论哪个活动位于顶部),这只会将任务置于最前面。如果应用程序未处于活动状态,则会以您的根活动启动它。
答案 1 :(得分:1)
在所有活动中定义: 1.)定义一个名为'check_running mode'的静态最终布尔标志 2.)在所有活动中定义(覆盖)onResume()和onPause()方法。 3.)分别在OnResume()和OnPause()方法中将此falg的值设置为'true',将'false'设置为'false'。 4.)检查您何时收到推送通知: 一个。如果falg值为true,则表示app处于forground状态,因此在这种情况下不执行任何操作 湾如果标志值为false,则意味着应用程序处于后台,因此您可以在该情况下打开应用程序
注意:falg必须是静态final,因为您可以从任何活动中更改它并简单地在接收器类中访问它。我希望它对你有用!
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();
}
答案 2 :(得分:-1)
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;
}