Apuntes donde ire anotando los pasos que sigo para desarrollar una app para Android usando Kotlin como lenguaje y entorno de desarrollo Android Studio
Sobre la App a desarrollar
La app que se diseñará es un analizador de batería, donde se informará al usuario del estado de la batería, su consumo y información de la batería.
Detallando funcionalidades:
- Mostrar nivel de batería actual, mediante barra circular
- Mostrar información del sistema de carga, red eléctrica, USB o inalámbrica
- Mostrar tiempo de carga o restante, dependiendo si el dispositivo se está cargando.
- Mostrar información de la batería, fabricante, capacidad, voltaje, temperatura
- Monitorizar la carga o descarga mediante el amperaje, gráfica en tiempo real opcional.
- Accesos directos a la sección batería de la configuración del sistema y uso de energía
- Panel adyacente con controles rápidos, para wifi, bluetooth, brillo, sonido
- Modo oscuro compatible con Android Q
Requisitos
En el equipo de producción debemos tener instalador Java8 (Java SE Development Kit 8) y el Android Studio, por la red corren miles de tutoriales de como instalar para Windows10, Linux o MacOS.
La otra herramienta en tener instalada Figma que es para hacer bocetos de apps y así ir detallando el diseño global, colores, estructura, datos visuales, posición del contenido, secciones de la app, etc..
También sirve para diseñar iconos, folletos publicitarios etc..
Diseñando la interfaz
Se debe crear un boceto para plasmar la idea y así ir diseñando la funcionalidad y representación de los datos en pantalla, agrupar funcionalidades por vistas:
Vista Estado de la batería
- Mostrar un gráfico con el nivel actual de la batería y que cambie de color dependiendo del nivel que se encuentre.
- Mostrar si la batería se está cargando o descargando
- Mostrar el tipo de carga, si es por toma de corriente alterna (AC), carga por USB o inalambrica (wireless)
- Mostrar estado de salud de la batería, Buen estado, Mal estado etc…

Recopilación de funcionalidades
Antes de empezar a picar código se debe estructurar la aplicación , analizar los datos que se pueden obtener con las APIS que ofrece Android y ver su funcionalidad en este caso BatteryManager.
Interceptar datos de batería
Para obtener los datos de la batería se debe interceptar los mensajes mediante un Broadcast en el canal ACTION_BATTERY_CHANGED
private val batteryChangeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
...
}
}
override fun onStart() {
super.onStart()
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
registerReceiver(batteryChangeReceiver, filter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(batteryChangeReceiver)
}
Detectar si existe batería
Antes de obtener datos de batería se debe mirar si el dispositivo tiene batería, se realiza con el flag EXTRA_PRESENT
Obtener estado de la batería
Para obtener el estado de la batería si se está cargando, descargando, si se ha llegado al 100% de la carga etc…
val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
val batteryPct: Float = level / scale.toFloat()
Obtener método de carga de la batería
Las APIS de Android ofrecen la posibilidad de poder detectar el método de la carga que se está usando
val chargePlug: Int = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
when (chargePlug) {
BatteryManager.BATTERY_PLUGGED_WIRELESS -> lblBatteryCharge.text = "Wireless charge"
BatteryManager.BATTERY_PLUGGED_AC -> //Corriente alterna
BatteryManager.BATTERY_PLUGGED_USB -> //Por usb
else -> //Se está usando la batería
}
Detectar estado de salud de la batería
Para obtener el estado de salud de la batería Android ofrece solo un dato, sin ciclos de batería ni aun menos estado de las celdas etc…
when (intent.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
BatteryManager.BATTERY_HEALTH_GOOD -> //En buen estado
BatteryManager.BATTERY_HEALTH_COLD -> //Fría
BatteryManager.BATTERY_HEALTH_DEAD -> //Muerta
BatteryManager.BATTERY_HEALTH_OVERHEAT -> //Sobrecalentada
BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> //Sobre voltaje
BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> //Fallo no especificado
BatteryManager.BATTERY_HEALTH_UNKNOWN -> //Desconocido
}
Otros datos de la batería
Se puede extraer otros datos de la batería como es la temperatura, su voltaje y el amparaje de carga o descarga.
val batteryVoltage: Int = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1)
val batteryTemperature: Int = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1)
val batteryTechnology: String? = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY)
Recursos
Recursos usados para crear los apuntes, subidos en git
Un comentario en “Crear una app en Kotlin: analizador de batería”