2011-03-11 6 views
6

Me gustaría ver la tarea reciente de mi teléfono Android. Estaba intentando un código de internet pero ninguno de ellos funciona correctamente. Solo quiero obtener el PID y el nombre de la última aplicación ejecutada por el usuario. Por ejemplo, si ejecuto la aplicación de la calculadora y luego la aplicación de tarea reciente que hice, esta aplicación debería ser capaz de decirme algo así como: "la última aplicación que ha ejecutado es 'calculadora' y el PID es '2222' ".Ver la tarea reciente de Android ejecutada por el usuario

Estaba revisando la página web de desarrolladores de Android para obtener algún código y esto es lo que encontré, pero no sé cómo implementarlo para Android.

ActivityManager.RecentTaskInfo Información que puede recuperar sobre las tareas que el usuario ha iniciado o visitado recientemente.

ActivityManager.RunningServiceInfo Información que puede recuperar sobre un servicio en particular que se está ejecutando actualmente en el sistema.

cualquier sugerencia,

Saludos

ActivityManager.RunningTaskInfo información se puede recuperar de una tarea en particular que actualmente está "en marcha" en el sistema.

Respuesta

4

Aquí está mi solución:

final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

    for (int i = 0; i < recentTasks.size(); i++) 
    { 
     Log.d("Executed app", "Application executed : " +recentTasks.get(i).baseActivity.toShortString()+ "\t\t ID: "+recentTasks.get(i).id+"");   
    } 

Tenga cuidado !! El último ID no es el PID del proceso !! Si desea obtener el PID del proceso utilicé el siguiente comando:

mLogcatProc = Runtime.getRuntime().exec(new String[] {"ps"}); 

leer el resultado de la búsqueda del nombre de la aplicación y luego dividir para obtener PID de proceso.

+0

pero ¿cómo puedo dividir esa cadena? –

+0

¿qué permisos se requieren? –

+1

getRunningTasks está en desuso desde API 21 –

1

Hace poco estuve revisando los servicios disponibles que también usaba el administrador de actividades. Probablemente solo cambie esto al método getRecentTasks (int maxNum, int flags) y modifique el siguiente a sus necesidades !?

private boolean isServiceOnline() { 

      final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 

      final List<ActivityManager.RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE); 
      for (int i = 0; i < services.size(); i++) { 
       String packageClassName = services.get(i).service.getClassName(); 
       if (packageClassName.equals("org.couchdb.android.CouchService")) { 
        Log.d(TAG, "Service Nr. " + i + " :" + services.get(i).service); 
        Log.d(TAG, "Service Nr. " + i + " package name : " + services.get(i).service.getPackageName()); 
        Log.d(TAG, "Service Nr. " + i + " class name : " + packageClassName); 
        ; 
        return true; 
       } 
      } 
      return false; 
     } 
7
int numberOfTasks = 1; 
ActivityManager m = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); 
//Get some number of running tasks and grab the first one. getRunningTasks returns newest to oldest 
RunningTaskInfo task = m.getRunningTasks(numberOfTasks).get(0); 

//Build output 
String output = "the last application you've executed is '"+task.id+"' and the PID is '"+task.baseActivity.toShortString()+"'"; 

getRunningTasks

RunningTaskInfo

Cuestiones relacionadas