Cómo brindar compatibilidad con dispositivos sin batería

En esta página, se describe cómo maneja Android los productos que tienen funciones removibles o sin baterías internas. En cambio, los últimos se conectan a una fuente de alimentación externa, como un tomacorriente de CA o un puerto USB en otro dispositivo.

¿Hay una batería?

Las aplicaciones pueden usar el siguiente código para detectar si el dispositivo tiene batería presente:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

Comportamiento de los dispositivos sin batería

Si Android no detecta un dispositivo con batería en el producto, ten en cuenta lo siguiente: se usan los valores predeterminados relacionados con la batería. Ten en cuenta que los valores predeterminados cambiaron en Versión de Android 9 En esta tabla, se muestran las diferencias.

Estado de la batería Android 9 y versiones posteriores Android 8.1 y versiones anteriores
Presente falso verdadero
Estado desconocido cargando
Capacidad restante 0 100%
Salud desconocido bueno
Estado en línea del cargador de CA no se modificó forzado a verdadero

Los fabricantes pueden modificar la configuración predeterminada con un kernel fuente_de_energía o la HAL de Health.

Android 9 y versiones posteriores

Android 9 quita algunos códigos anteriores para el uso sin batería dispositivos que de forma predeterminada simulaban tener batería, se cargaban a 100%, y estaba en buen estado, con una medición de temperatura normal en su termistor.

La mayoría de las APIs del framework que abordan esta información siguen controlando de la misma manera que antes: el sistema se considera carga (es decir, si no funciona con batería), y no se considerará tenga poca batería. Si la interfaz de usuario dibuja el ícono de batería, aparecerán con un signo de exclamación y el porcentaje de batería se mostrará como 0%. Sin embargo, el dispositivo no se apagará debido a la batería baja y a los trabajos que una carga o una batería en buen estado.

Android 8.1 y versiones anteriores

Como el estado de la batería es desconocido, las APIs del framework de Android considerarán que el sistema se está cargando (o que no se está ejecutando con energía de la batería) y no se considerará que tiene batería baja. Si la interfaz de usuario renderiza la batería aparecerá un signo de exclamación y el porcentaje de batería se muestra como 0%. Sin embargo, el dispositivo no se apagará debido a la batería baja y a los trabajos requieren carga o están en buenas baterías.

Implementación

Es posible que el código predeterminado de Android 9 funcione correctamente para tu dispositivo, pero se recomienda hacer que un kernel o una HAL cambien a reflejar con precisión la energía y el estado de la batería de tu producto, como se describe arriba. Si Android 9 y versiones posteriores no detectan un dispositivo de carga de clase de fuente de alimentación de Linux, de forma predeterminada, todos los tipos de cargadores (CA, USB, inalámbricos) tendrán el estado sin conexión. Si todos los cargadores están sin conexión, pero no hay ningún dispositivo con batería detectado, se considerará que el sistema se está cargando en el sentido de que Funciona con energía externa y no con batería, como se describió anteriormente.

Si el producto no tiene batería y siempre está conectado a una fuente de alimentación fuente, se recomienda implementar un cargador de clase de suministro de energía del kernel de Linux controlador para la fuente de alimentación de CA o USB que establece el atributo en línea sysfs a true. O bien puedes configurar la propiedad en línea del cargador de CA en una HAL de Health para tu dispositivo. Para ello, implementa una HAL de Health como se describe en Cómo implementar Health 2.0

Este HAL de Health personalizado implementa una versión personalizada de Health::getHealthInfo() que modifica el valor de BatteryProperties.chargerAcOnline = true.

Para comenzar, copia el archivo hardware/interfaces/health/2.0/default/Health.cpp a tu propia implementación de la HAL de Health y modifícala según la política de Health 2.0 README.