【发布时间】:2017-06-12 06:40:19
【问题描述】:
我的应用从服务器接收 GCM 消息。我已经完成了所有工作,并收到了通知。
我的问题是,如果应用程序已打开,那么我不想显示通知,而只是显示应用程序的消息。但如果应用程序关闭,那么我需要显示通知(如聊天应用程序)。
我该如何确定?
谢谢
【问题讨论】:
-
除了手动之外无法确定它 - 在某处创建一些标志,并跟踪应用程序的活动生命周期以检查是否有任何活动在前台。
标签: android
我的应用从服务器接收 GCM 消息。我已经完成了所有工作,并收到了通知。
我的问题是,如果应用程序已打开,那么我不想显示通知,而只是显示应用程序的消息。但如果应用程序关闭,那么我需要显示通知(如聊天应用程序)。
我该如何确定?
谢谢
【问题讨论】:
标签: android
你可以检查应用程序是否在后台,或者不试试这个。
public static boolean isAppIsInBackground(Context context) {
boolean isInBackground = true;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (String activeProcess : processInfo.pkgList) {
if (activeProcess.equals(context.getPackageName())) {
isInBackground = false;
}
}
}
}
} else {
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(context.getPackageName())) {
isInBackground = false;
}
}
return isInBackground;
}
【讨论】:
您可以将 Activity 生命周期事件的侦听器添加到您的 Application 对象。
看这里 Android event listener for app lifecycle
Checking if an Android application is running in the background
【讨论】: