Command Palette

Search for a command to run...

Battery Status API: Obtener Información de la Batería en JavaScript

Aprende a usar la API Battery Status para obtener información sobre el nivel de carga, estado de carga, tiempo restante y optimizar tu aplicación según el estado de la batería del dispositivo.

Lectura: 12 min
Nivel: Intermedio

TL;DR - Resumen rápido

  • La API Battery Status está disponible en navigator.getBattery()
  • Devuelve una promesa que se resuelve con un objeto BatteryManager
  • Proporciona nivel de carga, estado de carga y tiempo estimado
  • Emite eventos cuando cambia el estado de la batería
  • Permite optimizar la aplicación según el nivel de batería

Introducción a la API Battery Status

La API Battery Status permite a las aplicaciones web acceder a información sobre la batería del dispositivo, incluyendo el nivel de carga actual, si el dispositivo está cargando, el tiempo restante hasta que se agote la batería, y el tiempo hasta que se complete la carga. Esta información es invaluable para optimizar el rendimiento y la experiencia de usuario según el estado de la batería.

La API es asíncrona y basada en promesas, lo que significa que debes usarnavigator.getBattery() para obtener una promesa que se resuelve con un objeto BatteryManager. Este objeto contiene todas las propiedades y métodos necesarios para interactuar con la batería.

  • Aplicaciones de <strong>productividad</strong> para ajustar el rendimiento según la batería
  • Juegos para <strong>reducir efectos</strong> cuando la batería es baja
  • Aplicaciones de <strong>streaming</strong> para ajustar la calidad del video
  • Interfaces de <strong>accesibilidad</strong> para usuarios con batería baja
  • Aplicaciones de <strong>navegación</strong> para optimizar el consumo de energía

Privacidad y permisos

La API Battery Status no requiere permisos explícitos del usuario, pero la información de la batería puede considerarse información sensible. Por esta razón, algunos navegadores pueden limitar el acceso a esta API en ciertos contextos o pueden eliminarla en el futuro.

Obtener Información de la Batería

El método navigator.getBattery() devuelve una promesa que se resuelve con un objeto BatteryManager. Este objeto contiene propiedades comolevel (nivel de carga), charging (estado de carga),chargingTime (tiempo hasta carga completa) y dischargingTime(tiempo hasta agotamiento).

Obtener Información Básica

La forma más simple de usar la API es llamar a navigator.getBattery()y acceder a las propiedades del objeto BatteryManager devuelto. Las propiedades más importantes son level (0.0 a 1.0) ycharging (true/false).

obtener-bateria.js
Loading code...

Este código muestra cómo obtener la información básica de la batería. El nivel de carga es un valor entre 0.0 (0%) y 1.0 (100%), mientras que chargingindica si el dispositivo está conectado a una fuente de alimentación. Las propiedadeschargingTime y dischargingTime pueden ser Infinitysi el dispositivo no puede calcular el tiempo estimado.

Verificar Soporte de la API

Antes de usar la API Battery Status, es importante verificar que el navegador la soporte. Aunque la API tiene buen soporte en navegadores modernos, algunos navegadores no la implementan o la han eliminado por razones de privacidad.

verificar-soporte.js
Loading code...

Este código muestra cómo verificar si la API Battery Status está disponible antes de usarla. La verificación es simple: solo necesitas comprobar si "getBattery" existe en el objeto navigator.

Compatibilidad limitada

La API Battery Status ha sido eliminada de Firefox y Safari por razones de privacidad. Actualmente solo está disponible en navegadores basados en Chromium (Chrome, Edge, Opera). Siempre verifica la compatibilidad antes de usarla.

Eventos de Cambio de Batería

El objeto BatteryManager emite eventos cuando cambia el estado de la batería. Los eventos principales son levelchange, chargingchange,chargingtimechange y dischargingtimechange. Estos eventos te permiten reaccionar en tiempo real a los cambios en el estado de la batería.

Evento levelchange

El evento levelchange se dispara cuando cambia el nivel de carga de la batería. Este evento es útil para mostrar advertencias cuando la batería está baja o para ajustar el comportamiento de la aplicación según el nivel de carga.

evento-levelchange.js
Loading code...

Este código muestra cómo escuchar el evento levelchange para mostrar advertencias cuando la batería está baja. El evento se dispara cada vez que el nivel de carga cambia, lo que te permite reaccionar inmediatamente. Un umbral común para advertencias es 20% (0.20), aunque puedes ajustarlo según las necesidades de tu aplicación (juegos intensivos pueden necesitar advertencias a niveles más altos).

Evento chargingchange

El evento chargingchange se dispara cuando cambia el estado de carga del dispositivo (cuando se conecta o desconecta del cargador). Este evento es útil para cambiar el comportamiento de la aplicación según si el dispositivo está cargando o no.

evento-chargingchange.js
Loading code...

Este código muestra cómo escuchar el evento chargingchange para ajustar el comportamiento de la aplicación según el estado de carga. Cuando el dispositivo está cargando, puedes permitir actualizaciones automáticas, sincronización y animaciones. Cuando está en batería, reduce actualizaciones, deshabilita animaciones y activa el modo de ahorro de energía.

Todos los Eventos de Batería

Además de levelchange y chargingchange, la API Battery Status emite otros eventos como chargingtimechange ydischargingtimechange. Estos eventos te permiten monitorear todos los cambios en el estado de la batería.

todos-eventos.js
Loading code...

Este código muestra cómo escuchar todos los eventos de la API Battery Status. Al monitorear todos los eventos, puedes tener una visión completa del estado de la batería y reaccionar a cualquier cambio que ocurra.

Limpiar event listeners

Cuando ya no necesites monitorear la batería, es buena práctica remover los event listeners para evitar memory leaks. Puedes usar removeEventListener() para limpiar los listeners cuando el usuario abandona la página.

Usos Prácticos y Optimizaciones

La información de la batería te permite optimizar tu aplicación de varias maneras. Puedes ajustar el rendimiento, cambiar el comportamiento de las animaciones, modificar la frecuencia de actualizaciones y proporcionar advertencias visuales cuando la batería está baja.

Modo de Ahorro de Energía

Cuando la batería está baja, puedes activar un modo de ahorro de energía que reduce el consumo de energía. Esto puede incluir deshabilitar animaciones, reducir la frecuencia de actualizaciones, y cambiar el comportamiento de las operaciones intensivas.

modo-ahorro-energia.js
Loading code...

Este código muestra cómo implementar un modo de ahorro de energía que se activa cuando la batería está baja. El modo de ahorro reduce el consumo de energía deshabilitando animaciones y reduciendo la frecuencia de actualizaciones. Puedes hacer ajustes más dinámicos basándote en el nivel exacto: a 50% reducir animaciones, a 30% deshabilitarlas completamente, y a 10% mostrar advertencias urgentes.

Optimizar Rendimiento Según Batería

El estado de carga de la batería también puede influir en cómo optimizas el rendimiento. Cuando el dispositivo está cargando, puedes permitir operaciones más intensivas, mientras que cuando está en batería, puedes reducir el consumo de energía.

optimizar-rendimiento.js
Loading code...

Este código muestra cómo optimizar el rendimiento según el estado de carga de la batería. Cuando el dispositivo está cargando, puedes permitir actualizaciones más frecuentes y animaciones más complejas, mientras que cuando está en batería, puedes reducir el consumo de energía.

Compatibilidad y Limitaciones

La API Battery Status tiene varias limitaciones importantes que debes conocer. La compatibilidad varía significativamente entre navegadores, y algunos navegadores han eliminado la API por razones de privacidad. Además, hay limitaciones sobre la precisión y frecuencia de las actualizaciones.

Limitaciones del Navegador

Los navegadores imponen varias limitaciones sobre el uso de la API Battery Status. Estas limitaciones incluyen restricciones de privacidad, compatibilidad limitada y comportamiento diferente entre navegadores.

limitaciones-navegador.js
Loading code...

Este código muestra cómo manejar las limitaciones del navegador. Los navegadores pueden no soportar la API, eliminarla por razones de privacidad, o proporcionar información con diferente precisión. Siempre verifica la compatibilidad y proporciona una experiencia alternativa.

  • <strong>Chrome/Edge</strong>: Soportado, pero puede eliminarse en el futuro
  • <strong>Firefox</strong>: Eliminado por razones de privacidad
  • <strong>Safari</strong>: No soportado
  • <strong>Opera</strong>: Soportado (basado en Chromium)

API en desuso

La API Battery Status está marcada como "deprecated" en el estándar web y puede ser eliminada en el futuro. Si decides usarla, considera que puede dejar de funcionar en versiones futuras de los navegadores.

Alternativas y Soluciones

Dado que la API Battery Status puede no estar disponible en todos los navegadores, es importante tener alternativas y soluciones para proporcionar una buena experiencia de usuario independientemente del soporte de la API.

alternativas.js
Loading code...

Este código muestra cómo proporcionar una experiencia alternativa cuando la API Battery Status no está disponible. Siempre verifica la compatibilidad y proporciona funcionalidades alternativas como un modo de ahorro de energía manual.

Modo manual de ahorro de energía

Si la API Battery Status no está disponible, puedes proporcionar un modo manual de ahorro de energía que el usuario puede activar. Esto permite a los usuarios controlar el consumo de energía independientemente de la disponibilidad de la API.

Resumen: Battery Status API

Conceptos principales:

  • navigator.getBattery() devuelve una promesa con BatteryManager
  • BatteryManager.level indica el nivel de carga (0.0 a 1.0)
  • BatteryManager.charging indica si el dispositivo está cargando
  • Los eventos levelchange y chargingchange notifican cambios
  • chargingTime y dischargingTime estiman tiempos restantes

Mejores prácticas:

  • Siempre verifica la compatibilidad antes de usar la API
  • Usa eventos para reaccionar a cambios en tiempo real
  • Implementa modo de ahorro de energía para batería baja
  • Optimiza el rendimiento según el estado de carga
  • Proporciona alternativas cuando la API no está disponible