1
String callerPackage = getAppNameByPID(getContext(), Binder.getCallingPid());
private String getAppNameByPID(Context context, int callingPid) {
//How ?
    ....

    }

my questions: How to get app package name by pid?

see2851
  • 627
  • 1
  • 9
  • 13
  • Here is discussion you are looking for: http://stackoverflow.com/questions/8542326/android-how-to-get-the-processname-or-packagename-by-using-pid – Vahid Farahmand Jan 05 '13 at 03:13

2 Answers2

2

Each process can hold multiple packages, so it looks like:

private String[] getPackageNames(int pid)
{
    ActivityManager activityManager = (ActivityManager)getContext().getSystemService(Activity.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
    for(RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) 
    {
        try 
        { 
            if(runningAppProcessInfo.pid == pid)
            {
                return runningAppProcessInfo.pkgList;
            }
        }
        catch(Exception e) 
        {
        }
    }
    return null;
}
Elhanan Mishraky
  • 2,736
  • 24
  • 26
-1

Hello you can try out this code, it works fine for me.

private String getAppName(int pID)
{
    String processName = "";
    ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
    List l = am.getRunningAppProcesses();
    Iterator i = l.iterator();
    PackageManager pm = this.getPackageManager();
    while(i.hasNext()) 
    {
          ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
          try 
          { 
              if(info.pid == pID)
              {
                  CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
                  //Log.d("Process", "Id: "+ info.pid +" ProcessName: "+ info.processName +"  Label: "+c.toString());
                  //processName = c.toString();
                  processName = info.processName;
              }
          }
          catch(Exception e) 
          {
                //Log.d("Process", "Error>> :"+ e.toString());
          }
   }
    return processName;
}
GrIsHu
  • 29,068
  • 10
  • 64
  • 102
  • 1
    It's worth noting that process name != package name, it's only *usually* equal. You can specify that services, for example, should run in a different process. – Fabian Tamp Mar 05 '14 at 04:31