segundo - Encuentra cuánto tráfico de red generan otras aplicaciones de Android
que aplicaciones consumen mas megas (1)
Puede detectar la aplicación actualmente en primer plano con la llamada a ActivityManager.getRunningAppProcesses
. RunningAppProcessInfo
una lista de registros de RunningAppProcessInfo
. Para determinar qué aplicación está en primer plano, compruebe el campo RunningAppProcessInfo.importance
para la igualdad con RunningAppProcessInfo.IMPORTANCE_FOREGROUND
.
Pero tenga en cuenta que la llamada al método ActivityManager.getRunningAppProcesses()
debe realizarse NO en el hilo de la interfaz de usuario. Simplemente llámelo en el hilo de fondo (por ejemplo, a través de AsyncTask) y devolverá los resultados correctos. Verifique mi publicación para obtener detalles adicionales.
Intento crear un servicio en segundo plano que mida el uso del tráfico de varias aplicaciones para poder mostrar al usuario qué aplicaciones consumen la mayor parte del tráfico de datos.
Descubrí que la aplicación Spare Parts hace exactamente eso, pero después de instalarlo en un dispositivo Dell Streak 1.6 siempre obtengo "Sin datos de uso de la batería" para "Uso de la red". ¿Funciona esta función en absoluto en Repuestos? Además, no pude encontrar un código fuente funcional para Spare Parts.
https://android.googlesource.com/platform/development/+/froyo-release/apps/SpareParts
parece estar desactualizado o incompleto. (?)
Pero Spare Parts parece medir, por ejemplo, el uso de CPU por aplicación. ¿Cómo se hace eso en un teléfono sin rootear?
Mi idea general de cómo se puede medir el tráfico por aplicación es verificar regularmente
"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"
archivos y para ver qué aplicación tiene actualmente foco y por lo tanto es más probable que cause el tráfico de red generado.
Lamentablemente, no puedo encontrar la manera de conseguir que la aplicación tenga foco actualmente.
Encontré esto:
Android, ¿cómo obtener información sobre qué actividad se muestra actualmente (en foregorund)?
pero parece que se trata de probar, no solo un servicio de terceros que se ejecuta en un dispositivo Android no rooteado.
Podemos obtener qué actividades se ejecutan con ActivityManager.getCurrentTasks()
, pero cualquiera de ellas puede ser el que tenga el foco. Parece que los arquitectos de Android explícitamente no quieren que las aplicaciones de terceros conozcan qué aplicación tiene foco, debido a problemas de seguridad
(ver http://android.bigresource.com/Track/android-zb2mhvZX4/ ).
¿Hay alguna forma de evitar esto?
Además, si quiero no solo detectar qué actividades consumen tráfico sino también qué servicios, puedo obtener todos los servicios actualmente en ejecución con ActivityManager.getCurrentSerives()
e incluso ver para cada uno si está en modo de primer plano (a diferencia de ser descartado si Android necesita recursos). Pero esto de nuevo no me lleva lejos.
¿Algunas ideas?