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 bateria interna. Os últimos dispositivos 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 abaixo 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 seguintes valores padrão relacionados à bateria serão usados. Observe que 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
Presente 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 como verdadeiro

Os fabricantes podem mudar as configurações padrão usando um driver power_supply do kernel ou HAL de saúde.

Android 9 e versões mais recentes

O Android 9 remove parte do código anterior para dispositivos sem bateria que, por padrão, alegou que uma bateria estava presente, estava sendo carregada em 100% e estava em boa saúde 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: 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 as tarefas que exigem recarga ou bateria boa são programadas.

Android 8.1 e versões anteriores

Como o status da bateria é desconhecido, as APIs de framework do Android vão considerar que o sistema está carregando (ou não está funcionando com energia da bateria) e não serão consideradas como tendo a bateria fraca. Se a interface do usuário renderizar o ícone de bateria, ele será exibido 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 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 na HAL para refletir com precisão o estado de energia e da bateria do produto, conforme descrito acima. Se o Android 9 e versões mais recentes não detectar um dispositivo carregador de classe de fonte de alimentação Linux (AC, USB, sem fio), por padrão, todos os tipos de carregador (AC, USB, sem fio) terão o status offlline. Se todos os carregadores estiverem off-line, mas nenhum dispositivo de bateria detectado, o sistema ainda será considerado como sendo carregado porque está funcionando em um ambiente externo, e não de bateria, como descrito anteriormente.

Se o produto não tiver bateria e estiver sempre conectado a uma fonte de energia, é melhor implementar um driver carregador da classe power_supply do kernel do Linux para a fonte de energia CA ou USB que define o atributo online sysfs como true. Ou você pode configurar a propriedade on-line do carregador de CA em um HAL de saúde para seu dispositivo. Para fazer isso, implemente uma HAL de saúde, conforme descrito em Como implementar o Health 2.0.

Essa HAL de integridade personalizada 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/2.0/default/Health.cpp para sua própria implementação do HAL do Google Fit e modifique-o de acordo com o README do Google Fit 2.0.