Domanda

Sto cercando di fare un servizio in background che dovrebbe misurare l'utilizzo di traffico delle diverse applicazioni in modo da essere in grado di mostrare all'utente quali applicazioni consumano la maggior parte del traffico di dati.

ho scoperto che pezzi di ricambio app fa esattamente questo, ma dopo averlo installato su un dispositivo Streak 1.6 Dell ottengo sempre "Nessun dati di utilizzo della batteria disponibile" per "l'utilizzo della rete". Fa questa funzione in tutto il lavoro in parti di ricambio? Inoltre, non riuscivo a trovare un codice sorgente di lavoro per pezzi di ricambio.

https://android.googlesource.com/platform / / + / froyo-release di sviluppo / apps / dei Ricambi
sembra essere obsolete o incomplete. (?)

Ma Ricambi sembra su misura per esempio l'utilizzo della CPU per app. Come fa che su un telefono senza radici?

La mia idea generale di come il traffico per app potrebbe essere misurato è quello di controllare regolarmente la

"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"

"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"

"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"

file e per vedere quale applicazione ha attualmente messa a fuoco e quindi più probabile che a causare il traffico di rete generato.

Purtroppo non riesco a trovare come ottenere l'applicazione attualmente avendo attenzione.

Ho trovato questo:

Android, come per ottenere informazioni su cui l'attività è attualmente in mostra (in foregorund)?

ma sembra si tratta di test, non solo un servizio di festa 3d in esecuzione sul dispositivo non radicata Android.

possiamo ottenere ciò che le attività sono in esecuzione con ActivityManager.getCurrentTasks(), ma nessuno di loro può essere quello con il fuoco. Sembra che gli architetti Android in modo esplicito non vogliono app partito 3d di sapere che cosa applicazione ha messa a fuoco, a causa delle preoccupazioni per la sicurezza

(vedi http://android.bigresource.com/Track/android-zb2mhvZX4/ ).

C'è un modo per aggirare questo?

Inoltre, se voglio non solo di individuare quali attività mangiano il traffico, ma anche quali servizi, posso ottenere tutti i servizi attualmente in esecuzione con ActivityManager.getCurrentSerives() e anche vedere per ognuno se è in modalità primo piano (a differenza ad essere gettato via se Android ha bisogno di risorse). Ma questo ancora non mi porterà alcun lontano.

Tutte le idee?

È stato utile?

Soluzione

È possibile rilevare attualmente applicazione in primo piano con la chiamata ActivityManager.getRunningAppProcesses. Esso restituirà un elenco di record RunningAppProcessInfo. Per determinare quale applicazione è al momento del check in primo piano campo RunningAppProcessInfo.importance per l'uguaglianza di RunningAppProcessInfo.IMPORTANCE_FOREGROUND.

Ma essere ware che chiamata al metodo ActivityManager.getRunningAppProcesses() deve essere effettuata non nel thread UI. Basta chiamare in thread in background (ad esempio via AsyncTask) e restituisca risultati corretti. Controllare mio post per ulteriori dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top