通常情况下,应用可以使用getApplication().getApplicationInfo().processName来获取进程名。
但是,当该应用使用多进程时。比如在manifest文件中为组件声明android:process属性使这个组件运行在另一个进程中。此时若在该组件中使用上面的方法来获取进程名只能获取到manifest中application项设置的process属性的值(不设置的话默认情况下是包名)。
若想获取实际运行的进程名,可以使用以下方法。
public static String getProcessName(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
int pid = Process.myPid();
List<RunningAppProcessInfo> pis = am.getRunningAppProcesses();
for (RunningAppProcessInfo pi : pis) {
if (pid == pi.pid) {
return pi.processName;
}
}
return null;
}