2011-12-17 12 views
15

MI PREGUNTA: ¿Qué podría usar para recuperar el processName o packageName de un determinado proceso dado su PID?Android - ¿Cómo obtener el processName o packageName utilizando PID?

Como en mi administrador de tareas quería usar el PID mientras utilizaba el código killBackgroundProcesses para matar los procesos. El problema es que necesito el packageName/processName para hacer eso y sería una molestia para el usuario si le pidiera que escriba el processName en lugar de solo escribir su PID.

aquí es la imagen de mi administrador de tareas:

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

+1

lo que pidieron, pero tal vez en la versión final de su administrador de tareas que le permiten al usuario haga clic para seleccionar la aplicación para matar, o utilizar casillas de verificación . Hacer que escriban el PID parece un paso adicional e innecesario. –

+0

Sí, ese es mi plan ideal. Sin embargo, no sé cómo usar las casillas de verificación o hacer clic para seleccionar el método todavía. Es por eso que opté por hacer este método primero. Pero si tienes una idea de cómo hacerlo, realmente me ayudaría mucho. : D – Loren

+1

Puede probar un [ListView] (http://developer.android.com/reference/android/widget/ListView.html), o para las casillas de verificación, hay un tutorial [aquí] (http: // www. anddev.org/checkbox_text_list___extension_of_iconified_text_tutorial-t771.html). –

Respuesta

10

Hola puede utilizar este código, a mí me funciona en 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; 
} 
+0

Gracias por el código. Solo estoy tratando de resolverlo primero, ya que no soy tan versado en Android y ha pasado mucho tiempo desde que programé algo. :) – Loren

+0

Me gustaría preguntar qué hace Log.d? – Loren

+0

Para la ventana de registro (Log.d) vea esto: http://stackoverflow.com/questions/4584103/log-in-android-development –

2

Kill otros procesos es generalmente mala idea ..

considerar esta cuestión Android process killer y android task kill ..

Y también este blog Android: Killing a running process with processid(pid) and package name

Y para su pregunta Cómo Proceso para obtener Nombre de pid continuación

Algo así como,

Instalar un terminal emulator, inicie y ejecute:

ps | grep 10058 

ps muestra los procesos y filtros grep para el ID que desea.

Pero esto solo funciona si la aplicación se está ejecutando cuando ejecuta el comando.

+0

Sí, lo he leído varias veces. Sin embargo, es un proyecto en nuestra clase, así que no tengo más remedio que cumplir con los requisitos. Gracias por ayudar. – Loren

+1

obteniendo 'grep not found' en la terminal – Gabor

+0

Mi consola android tiene' grep', Android 4.4 CyanogenMod – dazito

19

Este código es una versión simplificada del código de Yaqub. Puedo usar esto como un método estático en una clase 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 ""; 
} 
No
+0

Lo siento, no obtuve su punto El pid que estamos pasando a esta función ya estamos obteniendo del objeto RunningAppProcessInfo, así que en lugar de Pasando a esta función y de nuevo obtener una lista de todas las aplicaciones en ejecución, podemos llamar directamente a la propiedad del objeto RunningAppProcessInfo i, e processInfo.processName – Naveed

Cuestiones relacionadas