android5.1+获取当前运行的app
2016-07-12 09:32
387 查看
本博客来自于:http://www.itnose.net/detail/6464581.html
本人试了,华为5.1是可以的。酷派4.1是不可以的。
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 process continue; } if (cpuSubsystem.endsWith("bg_non_interactive")) { // background policy continue; } 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 process continue; } 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(),包名后面会带有乱码 }
相关文章推荐
- 格式化一个文件的大小(size),或者说是格式化一个app的大小(size)
- Android Studio系列教程二--基本设置与运行
- iOS 偏好设置-简单使用
- Android动画:帧动画、补间动画、属性动画
- Android_聊天软件_加好友_与服务器交互
- Android】保存Fragment切换状态
- IOS Dev Intro - ARC Memory Leak
- 跨平台移动APP开发进阶(二)HTML5+、mui开发移动app教程
- 关于Android的.so文件你所需要知道的
- 浅谈Android屏幕和语言的适配
- iOS App开发中扩展RCLabel组件进行基于HTML的文本布局
- Android开发中OnTouchListener接口的返回值问题
- mybatis自动生成mapper中的insert与insertseletive,updateByPrimaryKey,updateByPrimaryKeySelective方法的区别
- Android抽象布局——include、merge 、ViewStub
- 微信公众号开发教程[004]-消息管理-回复消息
- 微信公众号开发教程[003]-消息管理-接收消息
- Android项目依赖多个项目,它们的jar包冲突的解决办法
- 微信公众号开发教程[002]-配置
- android压缩字符串java.util.zip.DataFormatException: stream error
- 微信公众号开发教程[001]-引言