Suporte a dispositivos sem bateria

Esta página descreve como o Android lida com produtos que têm baterias removíveis ou não têm baterias internas. Os últimos são conectados a uma fonte de energia externa, como uma tomada CA ou porta USB em outro dispositivo.

Há uma bateria?

O código a seguir pode ser usado por aplicativos para detectar se o dispositivo tem uma bateria presente:

```
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 o produto, os valores padrão relacionados à bateria abaixo 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 anteriores
Apresentar false verdadeiro
Status desconhecido carregando
Capacidade restante 0 100%
Clínica desconhecido bom
Status on-line do carregador de 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 integridade.

Android 9 e versões mais recentes

O Android 9 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 continuam a processar situações comuns da mesma forma que antes: o sistema é considerado em carregamento (ou seja, não está funcionando com a bateria) e não é considerado como tendo uma 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 trabalhos que exigem recarga ou bateria boa são programados.

Android 8.1 e versões anteriores

Como o status da bateria é desconhecido, as APIs do framework do Android consideram que o sistema está carregando (ou não está sendo executado com a bateria) e não consideram que a bateria está fraca. Se a interface do usuário renderizar o ícone de bateria, ele vai aparecer com um ponto de exclamação, e a porcentagem de bateria será mostrada como 0%. No entanto, o dispositivo não será desligado devido à bateria fraca, e os trabalhos que exigem carregamento ou uma bateria boa são programados.

Implementação

O código padrão do Android 9 pode funcionar corretamente no seu dispositivo, mas é recomendável fazer uma mudança no kernel ou no HAL para refletir com precisão o estado de energia e bateria do produto, conforme descrito anteriormente. Se o Android 9 e versões mais recentes não detectarem um dispositivo carregador de classe de fonte de alimentação Linux (link em inglês), todos os tipos de carregador (AC, USB, sem fio) terão 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 em carregamento, no sentido de que ele está sendo executado com energia externa, não de bateria, conforme descrito anteriormente.

Se o produto não tiver bateria e estiver sempre conectado a uma fonte de energia, é melhor implementar um driver charger da classe power_supply do kernel Linux para a fonte de alimentação CA ou USB que define o atributo sysfs online como true. Ou configure a propriedade on-line do carregador de CA em um HAL de saúde para seu dispositivo. Para configurar a propriedade "online" do carregador CA em uma HAL de saúde, consulte HAL de saúde AIDL.

Essa HAL personalizada do Health 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 da HAL do Google Fit e modifique-o de acordo com a HAL AIDL do Google Fit.