我已在我的应用程序中实现了推送通知。当我收到消息时,我必须检查应用程序是否在后台,因为如果应用程序不在后台我必须打开应用程序或者什么也不做。
我一直在使用以下代码,但这不起作用。
public static boolean isApplicationSentToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
我也使用了以下许可。
<uses-permission android:name="android.permission.GET_TASKS" />
但上面的代码不起作用。
我无法使用OnStart()
和OnDestroy()
,因为我的应用程序中有很多活动。
有没有其他人知道应用程序是否在后台。
由于
答案 0 :(得分:1)
这是以前的问题/答案。它用于检查后台,但您可以轻松检查前景。
Checking if an Android application is running in the background
答案 1 :(得分:0)
如果应用程序不在后台我必须打开应用程序或其他 什么都不做。
使用LocalBroadcastManager
- Link。
在onResume()
中注册您的活动作为广播的接收者,并在onPause()
中取消注册。
收到推送通知时发送广播。如果您的应用程序位于前台,它将接收广播并相应地处理它 - 否则,没有。
答案 2 :(得分:0)
一种方法是创建一个标志来自己跟踪前景状态。调用onPause()时,此标志设置为false;调用onResume()时,此标志设置为true。在正确设置标志后,您可以使用它来确定您在活动的其余部分中的操作。