check - suspender apps android
¿Cómo obtener los detalles de uso de la batería de las aplicaciones instaladas? (4)
Usando este código, puedo encontrar el nivel de batería del teléfono:
int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float percent = (level / (float)scale) * 100;
Pero, ¿cómo obtengo los detalles de uso de la batería de las aplicaciones instaladas en el teléfono, incluida la de la pantalla, como se muestra en la siguiente imagen?
En lugar de utilizar la reflexión para acceder a algunos miembros y métodos privados, le recomendaría que programe en un entorno de código fuente, lo que le permite utilizar cualquier API privada.
Si también desea incluir las clases o métodos internos, haga lo siguiente:
- Ir a / plataformas /.
- Copie, pegue y reemplace el archivo de API oculto descargado en este directorio, por ejemplo, android-23 / android.jar.
- Cambie compileSdkVersion y targetSdkVersion a 23 (por ejemplo).
- Finalmente, reconstruye tu proyecto.
Lamento decepcionarte, pero las API de uso de energía de Android no son públicas . así que no hay forma oficial de conseguir lo que quieres.
Pero puedes usar la reflexión para acceder a algunos miembros y métodos privados y hacer uso de ellos. También puedes echarle un vistazo a this . Desde aquí puede obtener algunos valores cuantitativos para el consumo de energía de cada aplicación.
Puede utilizar ese valor para calcular el porcentaje de todas las aplicaciones.
Las estadísticas de la batería se pueden descargar del dispositivo de esta manera:
adb shell dumpsys batteryinfo
Medir el consumo de energía para una aplicación específica o para una parte específica del hardware de los teléfonos no es tan fácil. Desde la API pública de Google Developer no es posible hacer esto de una manera fácil. Hay otras formas que son bastante complicadas. Para cada teléfono inteligente con Android, Google requiere que el fabricante agregue un llamado perfil de potencia XML a un dispositivo. Se ven asi
<item name="screen.on">0.1</item> <!-- ~200mA -->
<item name="screen.full">0.1</item> <!-- ~300mA -->
<item name="bluetooth.active">0.1</item> <!-- Bluetooth data transfer, ~10mA -->
<item name="bluetooth.on">0.1</item> <!-- Bluetooth on & connectable, but not connected, ~0.1mA -->
<item name="wifi.on">0.1</item> <!-- ~3mA -->
<item name="wifi.active">0.1</item> <!-- WIFI data transfer, ~200mA -->
<item name="wifi.scan">0.1</item>
Le dicen cuánta corriente consume cada estado de hardware de un componente (por ejemplo, Wifi tiene tres estados, la CPU tiene 10, etc.). Ahora Android está basado en Linux y esto le permite verificar el estado actual de cada componente de hardware. Por ejemplo el archivo
/sys/devices/virtual/leds/lcd-backlight/brightness
le da el estado actual de su LCD (observe que para esto no se requiere acceso a la raíz). Para cada componente de hardware existe tal camino. Si ahora desea medir exactamente la cantidad de energía que consume una aplicación, debe escribir un servicio que supervise cuando la aplicación esté activa o no y cuáles son los estados de hardware actuales. Con esta información podrás calcular el consumo de energía.
También existe una aplicación que es de código abierto, se llama PowerTutor (aquí está el enlace de Play-Store y en ella encontrará el código fuente . Hace exactamente lo que acabo de explicar. También publican un paper científico sobre la precisión de su El enfoque es (hace un buen trabajo).
Ahora viene el problema. Hace algunos años tuve el problema de medir el consumo de energía de algunas aplicaciones. Un cliente quería que evaluáramos su consumo de energía exacto. Al final, descubrimos que los perfiles de potencia en los que se basa el análisis no son lo suficientemente precisos. Parecía que los fabricantes solo están poniendo algunos valores en el XML que ni siquiera están relacionados con el dispositivo. Teníamos más de 100 dispositivos diferentes de 20 marcas diferentes, solo algunos de ellos parecían tener valores en su XML relacionados con el dispositivo.
Finalmente, puedo decir que no dedique mucho tiempo a medir el consumo de energía real en el lado del software, no vale la pena el esfuerzo. Use un multímetro real y mida el hardware directamente.