Skip to content

About

App de batería para Android — tiempo de carga, energía recibida y salud/vida útil de la batería

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🔋 Battery Life

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).

Pantalla principal Salud de la batería


✨ Qué hace

  • 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).

📦 Cómo instalarlo en Android

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.

Opción A — Instalar la APK ya compilada (la más simple)

  1. Descargá el APK: dist/batterylife-1.0.apk (desde el teléfono, abrí el repo en el navegador → entrá al archivo → Download).
  2. Pasalo al teléfono si lo bajaste en la PC (cable USB, Google Drive, Telegram, etc.).
  3. Abrilo con el explorador de archivos → Android pedirá habilitar "Instalar apps desconocidas" para esa app: permitilo.
  4. Tocá Instalar.
  5. 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.

Opción B — Compilar desde el código

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.apk

Permisos que pide y por qué

  • POST_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.


🧰 Detalles técnicos

  • 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: SQLiteOpenHelper plano (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.

🗂️ Estructura

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

💛 Apoyo

Si te sirvió alguna de estas herramientas, una donación por PayPal siempre ayuda:

Donate via PayPal

📄 Licencia

MIT — ver LICENSE.

About

App de batería para Android — tiempo de carga, energía recibida y salud/vida útil de la batería

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages