说明
getRunningAppProcesses:获得当前正在运行的所有应用程序的进程,一般用于判断当前进程是否在前台。processName,importance2个参数联合判断,实例如下:
/**
* app是否是前台(通过进程的级别判断)
* @param context 上下文
* @return true表示前台 false表示后台
*/
private static boolean isAppForeground(@Nullable Context context) {
if (context != null) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
if (activityManager != null) {
List<ActivityManager.RunningAppProcessInfo> processes = activityManager.getRunningAppProcesses();
if (processes != null) {
for (ActivityManager.RunningAppProcessInfo processInfo : processes) {
if (processInfo != null
&& processInfo.processName != null
&& (TextUtils.equals(processInfo.processName, context.getPackageName()))) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
}
}
}
}
return false;
}
注意
这里得到的进程信息里只有被载入当前进程的所有包名pkgList,所以只能判断当前列表有没有你需要监控的包名。android6.0以上的getRunningAppProcesses也失效,系统关闭了三方软件对系统进程的访问,出于安全考虑,当前只能获取自身应用的相关信息。所以只能自用,别想用此监控别的APP。
网友评论