¿Cómo puedo saber cuánta batería consume mi aplicación de Android en los dispositivos del usuario?

Estoy escribiendo una aplicación para evaluar la viabilidad de una red Bluetooth P2P en Android.

Me di cuenta de que en un Nexus Galaxy, que utiliza muy poca batería, mientras que en un Nexus S, drena la batería muy rápidamente. Esto es causado directamente por la alta carga de la CPU debido a Bluetooth.

Ahora, me gustaría recopilar información sobre cuánto drena la batería de mi aplicación en los dispositivos en los que está instalado. Simplemente registrar el tiempo frente al nivel de la batería es inútil, ya que no sé cuando el dispositivo está en uso, e incluso si he conectado que, no sabría si el usuario está jugando juegos en 3D mientras Torrenting WiFi o leer un libro electrónico en un pantalla atenuada.

Para empeorar el problema, no todo el uso de la batería causado por mi aplicación se le atribuye en la pantalla de la batería – algunos se enumeran como "Bluetooth", por ejemplo (de nuevo, depende del dispositivo).

¿Hay alguna manera fácil, que preserva la privacidad de obtener información útil sobre dispositivos no arraigados? Los dispositivos no están bajo mi control. No puedo simplemente ir a buscar en el menú, no puedo usar ADB.

La API de Android no es compatible actualmente. La única documentación disponible es la que describe cómo usar las transmisiones de BatteryManager , que sólo proporcionan el nivel general de la batería y no hay detalles por aplicación.

Supongo que incluso si hay formas indocumentadas de emular lo que muestra el administrador de la batería Configuración del sistema, se requeriría enraizamiento.

AFAIK no hay manera de hacer esto. Lo más cercano que puede llegar a hacer esto es conectar el dispositivo a una herramienta de monitoreo como pequeños laboratorios de ojos que no dibujar la batería consumida por su aplicación en el tiempo en un gráfico. También es compatible con marcar eventos clave en la vida de la aplicación, como activar WIFI / bluetooth, etc.

No hay soporte para hacer esto de forma remota, pero puede obtener los datos en sus propios dispositivos de prueba.

Este enfoque es bastante crudo, pero puede ayudar. Puede utilizar las transmisiones de BatteryManager existentes para realizar un seguimiento de los cambios en el nivel general de la batería mientras la aplicación esté activa .

Saber cuándo la aplicación está activa es un problema aparte. Si su aplicación consiste exclusivamente en Actividades, puede obtener buenos resultados comenzando a realizar un seguimiento cada vez que se llama a alguno de sus métodos onResume() , y detenga el seguimiento en onPause() . Si puedes tener todas tus actividades derivadas de una sola clase de actividad base, entonces esto es bastante fácil. Consulta Cómo detectar cuándo una aplicación de Android pasa al fondo y volver al primer plano para sugerencias sobre cómo realizar un seguimiento de esto.

Si tu aplicación es más compleja y las cosas inteligentes suceden en un componente de mayor duración como un servicio, es mucho más difícil.

Esto es crudo, pero al menos le ayudaría a distinguir "jugar juegos 3D" de "usar mi aplicación".

  • Android - detalles de uso de la batería
  • Comprender la "máquina de radio" de Android para mejorar la duración de la batería
  • ContentObserver vs BroadCastReceiver: Uso de la batería, RAM, CPU?
  • Context.registerReceiver devuelve una intención nula al intentar comprobar si la fuente de alimentación está conectada
  • Reconocimiento de actividades de Google Play Services - ¿Uso de la batería?
  • Crear "Uso de la batería" intento android
  • Determinar la entrada específica del cargador
  • ¿Por qué podría mi aplicación para Android ocasionalmente agotar la batería extremadamente rápido?
  • ¿Cómo calcular el tiempo restante de la batería del teléfono Android?
  • Notificaciones push de Pubnub y duración de la batería en Android
  • ¿Cómo determina Android si una aplicación tiene "Uso de batería alta" en "Solicitudes de ubicación recientes"?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.