Esta página descreve como o Android processa produtos que têm baterias removíveis ou não têm baterias internas. Os dispositivos mais recentes são conectados a uma fonte de energia externa, como uma tomada CA ou uma porta USB em outro dispositivo.
Há uma bateria presente?
O código a seguir pode ser usado por aplicativos para detectar se o dispositivo tem uma bateria:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Comportamento de dispositivos sem bateria
Se o Android não detectar um dispositivo de bateria para seu produto, os seguintes valores padrão relacionados à bateria serão usados. Os padrões mudaram na versão do Android 9. Esta tabela mostra as diferenças.
| Estado da bateria | Android 9 e versões mais recentes | Android 8.1 e versões mais antigas |
|---|---|---|
| Presente | falso | verdadeiro |
| Status | desconhecido | carregando |
| Capacidade restante | 0 | 100% |
| Saúde | desconhecido | bom |
| Status on-line do carregador CA | não modificado | forçado para verdadeiro |
Os fabricantes podem alterar as configurações padrão usando um driver power_supply do kernel ou o HAL de saúde.
Android 9 e versões mais recentes
Ele remove parte do código anterior para dispositivos sem bateria que, por padrão, fingiam que uma bateria estava presente, estava sendo carregada em 100% e apresentava boa integridade, com uma leitura normal de temperatura no termistor.
A maioria das APIs de framework que lidam com essas informações continua processando situações comuns da mesma forma que antes: o sistema é considerado carregando (ou seja, não está funcionando com energia da bateria) e não é considerado como tendo bateria fraca. Se a interface do usuário desenhar o ícone da bateria, ele vai aparecer com um ponto de exclamação, e a porcentagem da bateria será mostrada como 0%. No entanto, o dispositivo não será desligado devido à bateria fraca, e os jobs que exigem carregamento ou boa bateria serão programados.
Android 8.1 e versões mais antigas
Como o status da bateria é desconhecido, as APIs de framework do Android vão considerar o sistema como carregando (ou seja, não funcionando com energia da bateria) e não será considerado como tendo bateria fraca. Se a interface do usuário renderizar o ícone da bateria, ele vai aparecer com um ponto de exclamação, e a porcentagem da bateria será mostrada como 0%. No entanto, o dispositivo não será desligado devido à bateria fraca, e os jobs que exigem carregamento ou boa bateria serão programados.
Implementação
O código padrão do Android 9 pode funcionar corretamente para seu dispositivo, mas é recomendável fazer uma mudança no kernel ou no HAL para refletir com precisão o estado de energia e da bateria do seu produto, conforme descrito anteriormente. Se o Android 9 e versões mais recentes não detectarem um dispositivo de carregador de classe de fonte de alimentação do Linux, todos os tipos de carregador (CA, USB, sem fio) terão status _off-line_ por padrão. Se todos os carregadores estiverem off-line, mas nenhum dispositivo de bateria for detectado, o sistema ainda será considerado como carregando no sentido de que está funcionando com energia externa, não com bateria, conforme descrito anteriormente.
Se o produto não tiver uma bateria e estiver sempre conectado a uma fonte de energia, é melhor implementar um driver charger de classe power_supply do kernel do Linux para a fonte de alimentação CA ou USB que define o atributo on-line sysfs como true. Ou você pode configurar a propriedade on-line do carregador CA em um HAL de saúde para seu dispositivo. Para configurar a propriedade on-line do carregador CA em um HAL de saúde,
consulte HAL de saúde AIDL.
Esse HAL de saúde personalizado implementa uma versão personalizada de Health::getHealthInfo() que modifica o valor de BatteryProperties.chargerAcOnline = true.
Para começar, copie o arquivo
hardware/interfaces/health/aidl/default/Health.cpp
para sua própria implementação do HAL de saúde e modifique-o de acordo com o
HAL de saúde AIDL.