一.背景
此文适合穷尽所有方式都不得,绞尽脑汁无法获取Android 所有后台应用的开发者.
众所周知,Android 系统从5.1以后通过getRunningTask,或者getRunningService的方式已经无法获得应用进程了(只能获得自己的进程),之后出现了以AndroidProcess库为首的一种通过读取/proc/ 进程信息的库,但是从android 7.0开始,系统已经不支持读取/proc/,作为我们开发者来讲,真的是做各种斗争与Google战斗到底啊.
之后我又尝试通过
Runtime.getRuntime().exec("ps -A")
这种方式拿,发现好多手机也是拿不到的.这可真是让人胸闷.
经过不懈的努力,发现了一个一定程度上可以解决此问题的方法.
另:如果想获取顶层应用包名的同志请搜索UsageStateManager的使用,此处是想获得所有应用的包名.
解决方案:
话不多说,见代码:
public void getRunningApp(){
PackageManager localPackageManager = getPackageManager();
List localList = localPackageManager.getInstalledPackages(0);
for (int i = 0; i < localList.size(); i++) {
PackageInfo localPackageInfo1 = (PackageInfo) localList.get(i);
String str1 = localPackageInfo1.packageName.split(":")[0];
if (((ApplicationInfo.FLAG_SYSTEM & localPackageInfo1.applicationInfo.flags) == 0) && ((ApplicationInfo.FLAG_UPDATED_SYSTEM_APP & localPackageInfo1.applicationInfo.flags) == 0) && ((ApplicationInfo.FLAG_STOPPED & localPackageInfo1.applicationInfo.flags) == 0)) {
Log.e(TAG,str1);
}
}
}
就这短短的几行代码,本人简直翻山越岭,没想到,就这几行代码,愣是Goole也搜不到,百度也查不着...现在人们就是各种搬,搬来搬去都是一些过时的方法,自己也不去深究,导致浪费了很多时间.