我们知道在5.0以及之前的版本上获取后台正在运行的程序可以通过ActivityManager.getRunningAppProcesses();来获取一个RunningAppProcessInfo的list,但是5.0之后的版本此方法只能是获取自己的应用信息,那么接下来我们介绍下5.0之后版本的处理:
List<RunningAppProcessInfo> runningAppsInfo = new ArrayList<RunningAppProcessInfo>();
PackageManager pm = context.getPackageManager();
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> runningServices = am
.getRunningServices(Integer.MAX_VALUE);
for (ActivityManager.RunningServiceInfo service : runningServices) {
String pkgName = service.process.split(":")[0];
try {
RunningAppProcessInfo item = new RunningAppProcessInfo();
item.pkgList = new String[] { pkgName };
item.pid = service.pid;
item.processName = service.process;
item.uid = service.uid;
runningAppsInfo.add(item);
} catch (NameNotFoundException e) {
}
}
我们通过am.getRunningServices(Integer.MAX_VALUE)来获取正在后台运行的Services,而Services和应用拥有同样的Pid、Uid以及ProcessName,所以就可以构造一个新的RunningAppProcessInfo了。
获取指定app运行在前台还是后台,网上有6种方法(包括5.0以上的处理),可以参考:
http://p.codekk.com/detail/Android/wenmingvs/AndroidProcess