2011-09-29 22 views
5

Necesito desarrollar un servicio que escuche cada inicio de actividad. ¿Debo hacer algo como esto?Android para iniciar la aplicación

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses(); 
for (int i = 0; i < runningAppProcessInfo.size(); i++) { 
    Log.v("Proc: ", runningAppProcessInfo.get(i).processName); 
} 

¿Y tengo que hacerlo cada X segundos? ¿Afecta el consumo de batería?

+1

Información adicional: ActivityManager.getRunningTasks (1) devolverá la primera tarea de la lista de tareas en ejecución. Esta tarea parece ser siempre la que está en primer plano. – black

Respuesta

1

Hasta donde sé, actualmente no hay forma de escuchar el lanzamiento de una aplicación, a menos que sea la primera vez que se lance. ACTION_PACKAGE_FIRST_LAUNCH (Acción de emisión:. Se envía al paquete de instalación de una aplicación cuando se lanzó por primera vez que la aplicación (que es la primera vez que se mueve fuera del estado de detención)

así que supongo que su solución es la mejor para este en este momento.

2

por lo que yo sé que hay una clase IActivityController.Stub en android.app paquete. Pero esta es una interfaz {@hide} (como alguien dijo que no tienen algún método para acceder @hide API).

podemos establecer una El oyente escuchará el cambio de actividad de esta manera:

mAm = ActivityManagerNative.getDefault();   
    try { 
     mAm.setActivityController(new ActivityController()); 

    } catch (RemoteException e) { 
     System.err.println("** Failed talking with activity manager!");} 

y Class ActivityManagerNative is @hide also. ActivityController es una clase que se extiende IActivityController.Stub.

Cómo acceso a la API @hide:

  1. puede obtener el código fuente de Android para construir un tener- @ ocultar-api Android.jar de usar.
  2. por reflexión.
+0

Una nota al respecto: en las versiones modernas de Android, al llamar 'setActivityController' requiere el permiso' SET_ACTIVITY_WATCHER' que requiere que su aplicación esté firmada con la clave utilizada para firmar el marco Android, lo que no es posible si está desarrollando una aplicación de terceros diseñada para ejecutarse en todos los ROM. – FuegoFro

Cuestiones relacionadas