我如何判断Android应用程序是否运行在前台?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (39)

我正在做一个状态栏通知在我的android应用程序,由c2dm触发。如果应用程序正在运行,我不想显示通知。我该如何确定应用程序是否在运行并处于前台?

提问于
用户回答回答于

创建一个全局变量,private boolean mIsInForegroundMode;并在其中分配一个falseonPause()和一个trueonResume()

示例代码如下:

private boolean mIsInForegroundMode;

@Override
protected void onPause() {
    super.onPause();
    mIsInForegroundMode = false;
}

@Override
protected void onResume() {
    super.onResume();
    mIsInForegroundMode = true;
}

// Some function.
public boolean isInForeground() {
    return mIsInForegroundMode;
}
用户回答回答于

你可以ActivityManager通过getRunningTasks方法检查正在运行的任务。然后检查返回的任务列表中的第一个任务, 这里是代码示例:

public Notification buildNotification(String arg0, Map<String, String> arg1) {

    ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> services = activityManager
            .getRunningTasks(Integer.MAX_VALUE);
    boolean isActivityFound = false;

    if (services.get(0).topActivity.getPackageName().toString()
            .equalsIgnoreCase(appContext.getPackageName().toString())) {
        isActivityFound = true;
    }

    if (isActivityFound) {
        return null;
    } else {
        // write your code to build a notification.
        // return the notification you built here
    }

}

不要忘记GET_TASKSmanifest.xml文件中添加权限,以便能够getRunningTasks()在上面的代码中运行方法:

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

扫码关注云+社区