如何知道应用程序是否在前台?

时间:2014-03-20 17:44:51

标签: android

我已在我的应用程序中实现了推送通知。当我收到消息时,我必须检查应用程序是否在后台,因为如果应用程序不在后台我必须打开应用程序或者什么也不做。

我一直在使用以下代码,但这不起作用。

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(),因为我的应用程序中有很多活动。 有没有其他人知道应用程序是否在后台。

由于

3 个答案:

答案 0 :(得分:1)

这是以前的问题/答案。它用于检查后台,但您可以轻松检查前景。

Checking if an Android application is running in the background

答案 1 :(得分:0)

  

如果应用程序不在后台我必须打开应用程序或其他   什么都不做。

使用LocalBroadcastManager - Link

onResume()中注册您的活动作为广播的接收者,并在onPause()中取消注册。

收到推送通知时发送广播。如果您的应用程序位于前台,它将接收广播并相应地处理它 - 否则,没有。

答案 2 :(得分:0)

一种方法是创建一个标志来自己跟踪前景状态。调用onPause()时,此标志设置为false;调用onResume()时,此标志设置为true。在正确设置标志后,您可以使用它来确定您在活动的其余部分中的操作。