Android M:如何获取所有进程UID?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android M:如何获取所有进程UID?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2779字,纯文字阅读大概需要4分钟。
内容图文
我有一个应用程序使用traffic stats API来查看哪些正在运行的进程正在使用网络.
我曾经通过获取通过getRunningAppProcesses()方法获得的uid来做到这一点.显然在Android M中已经更改为仅返回您的应用程序包名称,如here所示.
我的问题是:还有另一种方法来获取Android M中每个正在运行的进程的Name和UID吗?
以下是我之前如何做到这一点的示例,我想在Android M上重新创建此功能.
List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses();
PackageManager pm = context.getPackageManager();
for (int i = 0; i < procInfos.size(); i++) {
try {
String packageName = procInfos.get(i).processName;
String appName = "";
try {
appName = pm.getApplicationLabel(
pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA))
.toString();
} catch (NameNotFoundException e) {
appName = "";
}
int uid = procInfos.get(i).uid;
long ulBytes = TrafficStats.getUidTxBytes(uid);
long dlBytes = TrafficStats.getUidRxBytes(uid);
// Do other stuff.
非常感谢任何帮助.谢谢!
解决方法:
你可以使用ActivityManager.getRunningServices(int maxNum):
PackageManager pm = context.getPackageManager();
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> runningServices = am.getRunningServices(Integer.MAX_VALUE);
for (ActivityManager.RunningServiceInfo service : runningServices) {
String appName;
try {
appName = pm.getApplicationInfo(service.process, 0).loadLabel(pm).toString();
} catch (PackageManager.NameNotFoundException e) {
appName = null;
}
int uid = service.uid;
long ulBytes = TrafficStats.getUidTxBytes(uid);
long dlBytes = TrafficStats.getUidRxBytes(uid);
}
文档说明这不适用于生产.我也没有做太多测试.如果不符合您的要求,请发表评论.我能想到的另一件事就是在shell中解析运行ps的输出.
UPDATE
在shell中解析ps的输出,我们可以获得当前正在运行的应用程序.例:
PackageManager pm = context.getPackageManager();
// Get the output of running "ps" in a shell.
// This uses libsuperuser: https://github.com/Chainfire/libsuperuser
// To add this to your project: compile 'eu.chainfire:libsuperuser:1.0.0.+'
List<String> stdout = Shell.SH.run("ps");
List<String> packages = new ArrayList<>();
for (String line : stdout) {
// Get the process-name. It is the last column.
String[] arr = line.split("\\s+");
String processName = arr[arr.length - 1].split(":")[0];
packages.add(processName);
}
// Get a list of all installed apps on the device.
List<ApplicationInfo> apps = pm.getInstalledApplications(0);
// Remove apps which are not running.
for (Iterator<ApplicationInfo> it = apps.iterator(); it.hasNext(); ) {
if (!packages.contains(it.next().packageName)) {
it.remove();
}
}
for (ApplicationInfo app : apps) {
String appName = app.loadLabel(pm).toString();
int uid = app.uid;
long ulBytes = TrafficStats.getUidTxBytes(uid);
long dlBytes = TrafficStats.getUidRxBytes(uid);
/* do your stuff */
}
内容总结
以上是互联网集市为您收集整理的Android M:如何获取所有进程UID?全部内容,希望文章能够帮你解决Android M:如何获取所有进程UID?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。