2011-12-17 9 views
15

LA MIA DOMANDA: Che cosa posso utilizzare per recuperare il processName o packageName di un determinato processo dato il suo PID?Android - Come ottenere processName o packageName usando PID?

Poiché nel mio task manager volevo utilizzare il PID mentre utilizzavo il codice killBackgroundProcesses per terminare i processi. Il problema è che ho bisogno di packageName/processName per farlo e sarebbe una tale seccatura per l'utente se chiedessi loro di digitare in processName piuttosto che semplicemente digitando il suo PID.

ecco l'immagine della mia task manager:

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

+1

quello che hai chiesto, ma forse nella versione finale del vostro task manager che ci si lascia che l'utente fare clic per selezionare quale app per uccidere, o utilizzare le caselle di controllo . Avere loro digitare il PID sembra un passaggio in più non necessario. –

+0

Sì, questo è il mio piano ideale. Tuttavia, non so come usare le caselle di controllo o fare clic per selezionare il metodo ancora. Ecco perché ho optato per fare questo metodo prima. Ma se hai un'idea su come farlo, mi sarebbe di grande aiuto. : D – Loren

+1

Si potrebbe provare un [ListView] (http://developer.android.com/reference/android/widget/ListView.html), o per le caselle di controllo, c'è un tutorial [qui] (http: // www. anddev.org/checkbox_text_list___extension_of_iconified_text_tutorial-t771.html). –

risposta

10

Ciao è possibile utilizzare questo codice, funziona per me in 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

Grazie per il codice. Sto solo cercando di capirlo perché non sono molto esperto in Android ed è passato molto tempo da quando ho programmato qualcosa. :) – Loren

+0

Mi piacerebbe chiedere cosa fa il Log.d? – Loren

+0

Per la finestra Log (Log.d) vedere questo: http://stackoverflow.com/questions/4584103/log-in-android-development –

2

uccidere altri processi è generalmente cattiva idea ..

Guardate questa domanda Android process killer e android task kill ..

E anche questo blog Android: Killing a running process with processid(pid) and package name

E per la tua domanda Come per ottenere Nome processo da pid poi

Qualcosa di simile,

Installare una terminal emulator, avviare ed eseguire:

ps | grep 10058 

ps elenca i processi e filtri grep per l'ID che si desidera.

Ma questo funziona solo se l'applicazione è in esecuzione quando si esegue il comando.

+0

Sì, l'ho letto diverse volte. Tuttavia, è un progetto nella nostra classe quindi non ho altra scelta che rispettare i requisiti. Grazie dell'aiuto. – Loren

+1

ottenere 'grep not found' nel terminale – Gabor

+0

La mia console Android ha' grep', Android 4.4 CyanogenMod – dazito

19

Questo codice è una versione semplificata del codice di Yaqub. Io uso questo come un metodo statico in una 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 ""; 
} 
Non
+0

Scusa Non ho capito il tuo punto Il pid che stiamo passando a questa funzione stiamo già ricevendo dall'oggetto RunningAppProcessInfo così invece di passando a questa funzione e ottenendo nuovamente l'elenco di tutte le app in esecuzione, possiamo chiamare direttamente la proprietà dall'oggetto RunningAppProcessInfo i, e processInfo.processName – Naveed

Problemi correlati