App de batería para Android — muestra el estado en vivo con una pilita gráfica y dos medidores de potencia separados (batería vs. cargador, no son lo mismo), registra automáticamente cada sesión de carga (duración, energía recibida en Wh, velocidad de carga, potencia pico) y estima la salud / vida útil de la batería (capacidad actual vs. capacidad de diseño, ciclos de carga, tendencia de descarga en el tiempo).
- Estado en vivo — pilita gráfica con el % y un rayo cuando está cargando, estado (cargando/descargando/completa), fuente (AC/USB/inalámbrico), voltaje, corriente, temperatura, tecnología y salud reportada por el sistema.
- Potencia de la batería vs. potencia del cargador, separadas — la potencia de la
batería (
BATTERY_PROPERTY_CURRENT_NOW) es lo que entra/sale de la celda; la del cargador se lee del nodo sysfs del kernel y es lo que realmente entrega el cable — no son el mismo número. Si el fabricante no expone el nodo del cargador, esa fila se oculta sola en vez de mostrar un dato inventado. - Tracking automático de cada carga — un foreground service arranca solo al enchufar el cargador (aunque la app esté cerrada) y se detiene solo al desenchufar. Muestra una notificación con % y W mientras dura, y guarda la sesión completa: duración, energía recibida del cargador (Wh), energía neta a la batería, velocidad promedio (%/min) y potencia pico.
- Historial de cargas — lista de sesiones pasadas, con detalle de curva de nivel y potencia por sesión + exportar a CSV.
- Salud de la batería — capacidad actual estimada vs. capacidad de diseño, ciclos de carga (si el fabricante los expone) y tendencia de descarga en los últimos días.
- 100% local y offline — no pide permiso de Internet, todo se guarda en el dispositivo (SQLite).
La app no está en Google Play (se distribuye como APK). Es un debug build firmado con la clave de depuración; perfecto para uso personal.
- Descargá el APK:
dist/batterylife-1.0.apk(desde el teléfono, abrí el repo en el navegador → entrá al archivo → Download). - Pasalo al teléfono si lo bajaste en la PC (cable USB, Google Drive, Telegram, etc.).
- Abrilo con el explorador de archivos → Android pedirá habilitar "Instalar apps desconocidas" para esa app: permitilo.
- Tocá Instalar.
- Al abrir la app por primera vez, tocá "Permitir" en el banner de seguimiento en segundo plano (te manda a la configuración de batería del sistema) — sin esto, Android 12+ puede no dejar que la app registre las cargas automáticamente.
Requiere JDK 17 y el Android SDK (API 34).
git clone git@github.com:lpapa1977/BatteryLife.git
cd BatteryLife
./gradlew assembleDebug
# APK resultante:
# app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apkPOST_NOTIFICATIONS— mostrar el progreso de la carga en curso.FOREGROUND_SERVICE/FOREGROUND_SERVICE_SPECIAL_USE— poder correr el monitoreo de carga en segundo plano mientras el equipo está enchufado.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS— desde Android 12, recibir el broadcast de "cargador conectado" ya no alcanza para arrancar un foreground service en background; se necesita esta excepción para que el registro automático de cargas funcione de forma confiable (por ejemplo, cargando de noche con la app cerrada).RECEIVE_BOOT_COMPLETED— si el equipo arranca ya enchufado, retomar el tracking de esa carga.
No usa Internet ni envía datos a ningún servidor: todo corre en el dispositivo.
- Lenguaje: Kotlin · UI: XML + View Binding · gráficos propios en Canvas
(
LineGraphView, sin librería externa). - minSdk 29 · targetSdk 34 ·
applicationId = com.lpapa.batterylife· versión 1.0. - Persistencia:
SQLiteOpenHelperplano (sin Room) — sesiones de carga, muestras y snapshots periódicos de salud. - Background: foreground service (
specialUse) durante la carga +WorkManager(snapshot cada 30 min) para tendencia de salud fuera de la carga. - Dependencias:
androidx.core,androidx.appcompat,com.google.android.material,androidx.constraintlayout,androidx.recyclerview,androidx.work.
app/src/main/java/com/lpapa/batterylife/
MainActivity.kt # estado en vivo + onboarding de excepción de batería
ChargingService.kt # foreground service: samplea y cierra cada sesión de carga
PowerConnectionReceiver.kt / BootReceiver.kt # arrancan el service al enchufar / al bootear
BatteryHealthWorker.kt # snapshot periódico de salud (WorkManager)
BatteryStatusReader.kt # lectura única de BatteryManager / ACTION_BATTERY_CHANGED
ChargeRepository.kt / BatteryDbHelper.kt # persistencia SQLite
HistoryActivity.kt / SessionDetailActivity.kt / HealthActivity.kt
LineGraphView.kt # gráfico de línea propio (Canvas)
app/src/main/res/ # layout, strings (es-AR), drawables, file_paths del FileProvider
Si te sirvió alguna de estas herramientas, una donación por PayPal siempre ayuda:
MIT — ver LICENSE.

