本文主要是介绍android5.1+获取当前运行的app,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本博客来自于:http://www.itnose.net/detail/6464581.html
android5.1+获取当前运行的app
本人试了,华为5.1是可以的。酷派4.1是不可以的。
/** first app user */ public static final int AID_APP = 10000; /** offset for uid ranges for each user */ public static final int AID_USER = 100000; public static String getForegroundApp() {File[] files = new File("/proc").listFiles();int lowestOomScore = Integer.MAX_VALUE;String foregroundProcess = null;for (File file : files) {if (!file.isDirectory()) {continue;}int pid;try {pid = Integer.parseInt(file.getName());} catch (NumberFormatException e) {continue;}try {String cgroup = read(String.format("/proc/%d/cgroup", pid));String[] lines = cgroup.split("\n");String cpuSubsystem;String cpuaccctSubsystem;if (lines.length == 2) {//有的手机里cgroup包含2行或者3行,我们取cpu和cpuacct两行数据cpuSubsystem = lines[0];cpuaccctSubsystem = lines[1];}else if(lines.length==3){cpuSubsystem = lines[0];cpuaccctSubsystem = lines[2];}else { continue; }if (!cpuaccctSubsystem.endsWith(Integer.toString(pid))) {// not an application processcontinue;}if (cpuSubsystem.endsWith("bg_non_interactive")) {// background policycontinue;}String cmdline = read(String.format("/proc/%d/cmdline", pid));if (cmdline.contains("com.android.systemui")) {continue;}int uid = Integer.parseInt(cpuaccctSubsystem.split(":")[2].split("/")[1].replace("uid_", ""));if (uid >= 1000 && uid <= 1038) {// system processcontinue;}int appId = uid - AID_APP;int userId = 0;// loop until we get the correct user id.// 100000 is the offset for each user.while (appId > AID_USER) {appId -= AID_USER;userId++;}if (appId < 0) {continue;}// u{user_id}_a{app_id} is used on API 17+ for multiple user account support.// String uidName = String.format("u%d_a%d", userId, appId);File oomScoreAdj = new File(String.format("/proc/%d/oom_score_adj", pid));if (oomScoreAdj.canRead()) {int oomAdj = Integer.parseInt(read(oomScoreAdj.getAbsolutePath()));if (oomAdj != 0) {continue;}}int oomscore = Integer.parseInt(read(String.format("/proc/%d/oom_score", pid)));if (oomscore < lowestOomScore) {lowestOomScore = oomscore;foregroundProcess = cmdline;}} catch (IOException e) {e.printStackTrace();}}return foregroundProcess; } private static String read(String path) throws IOException {StringBuilder output = new StringBuilder();BufferedReader reader = new BufferedReader(new FileReader(path));output.append(reader.readLine());for (String line = reader.readLine(); line != null; line = reader.readLine()) {output.append('\n').append(line);}reader.close();return output.toString().trim();//不调用trim(),包名后面会带有乱码 }
这篇关于android5.1+获取当前运行的app的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!