方法一:
这个方法用在app主线程的activity或service里,因为要有context获取am。
private String getAppName(int pid)
{
String pkgName = "";
ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
//ActivityManager am = (ActivityManager)ServiceManager.getService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> mRunningProcess = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo amProcess : mRunningProcess)
{
if(amProcess.pid == pid)
{
pkgName = amProcess.processName;
break;
}
}
return pkgName;
}
方法二:
这个方法可以用在主线程或任意子线程,即使没有context的线程也可以用,但app要用读取文件权限。
private String getAppName(int pid)
{
String pkgName = "";
File f = null;
f = new File("/proc/"+pid+"/cmdline");
if(pid != 0 && f != null && f.exists())
{
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("/proc/"+pid+"/cmdline"), 256);
String line;
if ((line = br.readLine()) != null) {
pkgName = line.trim();
Log.i(TAG,"getAppName() ="+pkgName);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return pkgName;
}