2011-09-29 13 views
5

Ho bisogno di sviluppare un servizio che attenda l'inizio di ogni attività. Devo fare qualcosa di simile?android ascolta per l'avvio dell'app

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); 
} 

E ho bisogno di farlo ogni X secondi? Influisce sul consumo della batteria?

+1

Ulteriori informazioni: ActivityManager.getRunningTasks (1) restituirà la prima attività dall'elenco delle attività in esecuzione. Questo compito sembra essere sempre quello in primo piano. – black

risposta

1

Per quanto ne so, al momento non è possibile ascoltare l'avvio di un'app, a meno che non sia la prima volta che viene avviato. ACTION_PACKAGE_FIRST_LAUNCH (Azione Broadcast:. Inviato al pacchetto di installazione di un'applicazione quando tale applicazione è stata lanciata (che è la prima volta che viene spostato fuori dallo stato arrestato)

Quindi credo che la soluzione è la migliore per questo al momento.

2

per quanto ne so c'è una classe IActivityController.Stub in android.app pacchetto. Ma questa è un'interfaccia {@hide} (come qualcuno ha detto che ci hanno qualche metodo per accedere @hide API).

possiamo impostare un Ascoltatore per ascoltare Attività in questo modo:

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

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

e Classe ActivityManagerNative è @hide anche. ActivityController è una classe estende IActivityController.Stub.

Come l'accesso API @hide:

  1. è possibile ottenere il codice sorgente di Android per costruire un avere- @ nascondere-api Android.jar da utilizzare.
  2. per riflessione.
+0

Una nota a questo proposito: sulle versioni moderne di Android, la chiamata 'setActivityController' richiede l'autorizzazione' SET_ACTIVITY_WATCHER' che richiede che l'applicazione sia firmata con la chiave utilizzata per firmare il framework Android, il che non è realmente possibile se si sta sviluppando un'applicazione di terze parti progettata per funzionare su tutte le ROM. – FuegoFro

Problemi correlati