1、通过RunningTaskInfo类判断(需要额外权限)
/**
*判断当前应用程序处于前台还是后台
*/
public static boolean isAppRunningForeground(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;
}
需要在AndroidMenitfest.xml文件中添加以下权限
复制代码代码如下:
2.通过RunningAppProcessInfo类判断(不需要额外权限)
public boolean isAppRunningForeground(){
ActivityManager activityManager = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcessInfo : runningAppProcesses) {
if(appProcessInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
if(appProcessInfo.processName.equals(this.getApplicationInfo().processName))
return true;
}
}
return false;
}
3.继承 Application.ActivityLifecycleCallbacks 写一个自己的 ActivityLifecycleCallbacks
public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
private static int resumed;
private static int paused;
private static int started;
private static int stopped;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
++started;
}
@Override
public void onActivityResumed(Activity activity) {
++resumed;
}
@Override
public void onActivityPaused(Activity activity) {
++paused;
android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
}
@Override
public void onActivityStopped(Activity activity) {
++stopped;
android.util.Log.w("test", "application is visible: " + (started > stopped));
}
@Override
public void onActivityDestroyed(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
public static boolean isApplicationVisible() {
return started > stopped;
}
public static boolean isApplicationInForeground() {
// 当所有 Activity 的状态中处于 resumed 的大于 paused 状态的,即可认为有Activity处于前台状态中
return resumed > paused;
}
}
然后在自己定义的 Application 中的 onCreate() 方法中注册该 ActivityLifecycleCallbacks:
registerActivityLifecycleCallbacks(new MyLifecycleHandler());
这样的话我们就可以在自己定义的ActivityLifecycleCallbacks中监控自己应用中的所有的Activity的状态,通过MyLifecycleHandler.isApplicationInForeground() 方法即可判断应用是否处于前台状态。另外需要注意,ActivityLifecycleCallbacks是在API14即Android 4.0加入的。
参考链接:
https://blog.youkuaiyun.com/zhufuing/article/details/53007705
https://www.cnblogs.com/chenliyang/p/6558836.html