Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何知道应用程序是否在前台?_Android - Fatal编程技术网

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

Android 如何知道应用程序是否在前台?,android,Android,我已经在我的应用程序中实现了推送通知。当我收到消息时,我必须检查应用程序是否在后台,因为如果应用程序不在后台,我必须打开应用程序,否则什么也不做 我一直在使用下面的代码,但这是不工作的 public static boolean isApplicationSentToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTI

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

我一直在使用下面的代码,但这是不工作的

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;
  }
公共静态布尔值isApplicationSentToBackground(最终上下文){
ActivityManager am=(ActivityManager)context.getSystemService(context.ACTIVITY_服务);
列表任务=am.getRunningTasks(1);
如果(!tasks.isEmpty()){
ComponentName topActivity=tasks.get(0).topActivity;
如果(!topActivity.getPackageName().equals(context.getPackageName())){
返回true;
}
}
返回false;
}
我也使用了下面的许可

<uses-permission android:name="android.permission.GET_TASKS" />

但是上面的代码不起作用。 我不能使用
OnStart()
OnDestroy()
,因为我的应用程序中有很多活动。 是否有其他人知道该应用程序是否在后台


谢谢

这是前面的问题/答案。这是为了检查背景,但你也可以很容易地检查前景

如果应用程序不在后台,我必须打开应用程序,否则 什么也不做

使用
LocalBroadcastManager
-

onResume()
中将您的活动注册为广播接收器,然后在
onPause()
中将其注销


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

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

如果我使用此标志,则在所有不可能的活动中包括onResume和onPause。