web-dev-qa-db-fra.com

Android - Comment obtenir le processName ou le packageName en utilisant le PID?

MA QUESTION: Que pourrais-je utiliser pour récupérer le processName ou packageName d'un certain processus étant donné son PID?

Étant donné que dans mon gestionnaire de tâches, je voulais utiliser le PID tout en utilisant le code killBackgroundProcesses pour tuer les processus. Le problème est que j'ai besoin du packageName/processName pour le faire et ce serait un problème pour l'utilisateur si je lui demandais de taper le processName plutôt que de simplement taper son PID.

voici l'image de mon gestionnaire de tâches:

http://i.imgur.com/1zpXg.jpg

17
Loren

Bonjour, vous pouvez utiliser ce code, il fonctionne pour moi dans Android 2.3.3:

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;
}
13
Yaqub Ahmad

Ce code est une version simplifiée du code de Yaqub. J'utilise ceci comme méthode statique dans une classe Util:

public static String getAppNameByPID(Context context, int pid){
    ActivityManager manager 
               = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    for(RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()){
        if(processInfo.pid == pid){
            return processInfo.processName;
        }
    }
    return "";
}
19
Jeremy C

Tuer d'autres processus est généralement une mauvaise idée.

Regardez cette question tueur de processus Android et kill task Android ..

Et aussi ce blog Android: tuer un processus en cours avec processid (pid) et le nom du package

Et pour votre question Comment obtenir le nom du processus à partir de pid puis

Quelque chose comme,

Installez un émulateur de terminal , lancez-le et exécutez:

ps | grep 10058

ps répertorie les processus et les filtres grep pour l'ID souhaité.

Mais cela ne fonctionne que si l'application est en cours d'exécution lorsque vous exécutez la commande.

2
user370305