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 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 do dispositivo sem bateria
Se o Android não detectar um dispositivo de bateria para o produto, os valores padrão relacionados à bateria a seguir 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 |
---|---|---|
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 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 carregado 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 continua a lidar com situações comuns da mesma forma que antes: o sistema é considerado carregando (ou seja, não está sendo executado com energia da bateria) e não é considerado com bateria fraca. Se a interface do usuário mostrar o ícone de bateria, ele 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 tarefas que exigem carregamento ou uma bateria boa são agendadas.
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 tarefas que exigem carregamento ou bateria de boa qualidade são agendadas.
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 anteriormente. Se o Android 9 e versões mais recentes não detectarem um carregador da classe de fonte de alimentação do Linux, por padrão, todos os tipos de carregador (AC, USB, sem fio) terão o status off-line. 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.
Caso seu produto não tenha bateria e esteja 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
. Outra opção é configurar a propriedade on-line do carregador de CA em uma HAL de saúde
para seu dispositivo. Para configurar a propriedade on-line do carregador de CA em uma HAL de saúde,
consulte HAL de saúde AIDL.
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/aidl/default/Health.cpp
para sua própria implementação da HAL de saúde e modifique-o de acordo com a
HAL de IADL de saúde.