如何在前台检测我的Android应用程序?

如何在前台检测我的Android应用程序?,android,Android,我正在使用BroadcastReceiver的下一个代码尝试了解前台是否有我的应用程序: boolean inForeground = false; ActivityManager actMngr = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppPro

我正在使用BroadcastReceiver的下一个代码尝试了解前台是否有我的应用程序:

boolean inForeground = false;
ActivityManager actMngr = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses();
for (RunningAppProcessInfo pi : runningAppProcesses) {
    if (context.getPackageName().equals(pi.processName)) {
      inForeground = pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
    }
}
这个代码正确与否? 或者有人知道更简单的变体?
谢谢

最直接的方法是使用
onResume()
onPause()
跟踪前台状态。请参阅。

但是如果我有超过100个活动,并且我需要从BroadcastReceiver了解我的应用程序还是没有?BroadcastReceiver甚至不引用一个活动,因为它是在AndroidManifest.xml文件中定义的?也就是说,为什么您需要知道前台活动是否来自同一个包?我认为您的第二个解决方案几乎是正确的。您需要检查
get(0)
返回的RunningTaskInfo的
numRunning
标志。top活动可以停止并保持。
if (actMngr.getRunningTasks(1).get(0).topActivity.getPackageName().equals(context.getPackageName())){
  Log.d(TAG, "My");
} else {
  Log.d(TAG, "Not my");
}