判断app是处于前台还是后台
public class ManifestUtils {
/**
* 判定应用是否在前台运行(以是否在前台可见为标准).
*
* @param context
* @return true 在前台; false 在后台或被杀死
*/
public static boolean isForeground(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
LogUtil.i("yms appProcess.importance", appProcess.importance + "");
if (appProcess.importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
// 某些 Android 5.0之前的手机需要在此处再作判断
if (isBackground(context)) {
LogUtil.i("yms Background App:", appProcess.processName);
return false;
}
LogUtil.i("yms Foreground App:", appProcess.processName);
return true;
} else {
LogUtil.i("yms Background App:", appProcess.processName);
return false;
}
}
}
return false;
}
/**
* 判断当前应用程序处于后台运行(对isForeground方法起辅助判定作用)
*
* @param context
* @return true 在后台运行
*/
public static boolean isBackground(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
}
getRunningTasks()方法在Android L之后被废弃,需要找新的方案替代,找到了后会更新。
本篇博客为笔者笔记性质,有什么写的不好的地方,欢迎大家留言指出,相互交流学习一下。