it-swarm-pt.tech

Android - Como obter o processName ou packageName usando PID?

MINHA PERGUNTA: O que eu poderia usar para recuperar os processName ou packageName de um determinado processo, dado o seu PID?

Como no meu gerenciador de tarefas, eu queria usar o PID enquanto utilizava o código killBackgroundProcesses para matar os processos. O problema é que eu preciso do packageName/processName para fazer isso e seria um aborrecimento para o usuário se eu pedisse para ele digitar o processName em vez de apenas digitar seu PID.

aqui está a imagem do meu gerenciador de tarefas:

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

17
Loren

Olá, você pode usar este código, ele funciona para mim em 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

Este código é uma versão simplificada do código de Yaqub. Eu uso isso como um método estático em uma 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

Matar outros processos é geralmente uma má ideia ..

Veja esta pergunta assassino de processos do Android e matança de tarefas do Android ..

E também este blog Android: matando um processo em execução com processid (pid) e nome do pacote

E para sua pergunta Como obter o Nome do Processo do pid then

Algo como,

Instale um emulador de terminal , inicie-o e execute:

ps | grep 10058

ps lista os processos e filtros grep para o ID que você deseja.

Mas isso só funciona se o aplicativo estiver sendo executado quando você executar o comando.

2
user370305