In questa pagina viene spiegato in che modo Android gestisce i prodotti che hanno batterie rimovibili o non sono batterie interne. Questi ultimi sono invece collegati a una fonte di alimentazione esterna, ad esempio una presa di corrente CA o una porta USB su un altro dispositivo.
È presente una batteria?
Il seguente codice può essere utilizzato dalle applicazioni per rilevare se nel dispositivo è presente una batteria:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Comportamento dispositivo senza batteria
Se Android non rileva un dispositivo con batteria per il tuo prodotto, vengono utilizzati i seguenti valori predefiniti relativi alla batteria. Tieni presente che le impostazioni predefinite sono cambiate nella release di Android 9. Questa tabella mostra le differenze.
Stato batteria | Android 9 e versioni successive | Android 8.1 e versioni precedenti |
---|---|---|
Presenta | falso | vero |
Stato | sconosciuto | in carica |
Capacità rimanente | 0 | 100% |
Salute | sconosciuto | buona |
Stato online del caricabatterie CA | non modificato | forzato a true |
I produttori possono modificare le impostazioni predefinite utilizzando un driver del kernel power_supply o un HAL di integrità.
Android 9 e versioni successive
Android 9 rimuove alcuni codici precedenti per i dispositivi senza batteria che per impostazione predefinita simulavano la presenza di una batteria, che venivano ricaricati al 100% e che erano in buono stato con una lettura normale della temperatura sul termistore.
La maggior parte delle API del framework che gestiscono queste informazioni continua a gestire le situazioni comuni come in precedenza: il sistema è considerato in carica (ovvero non funziona a batteria) e non viene considerato con batteria in esaurimento. Se l'interfaccia utente disegna l'icona della batteria, questa verrà visualizzata con un punto esclamativo e la percentuale della batteria sarà pari allo 0%. Tuttavia, il dispositivo non si spegne a causa della batteria scarica e i job che richiedono la ricarica o una batteria in buone condizioni sono pianificati.
Android 8.1 e versioni precedenti
Poiché lo stato della batteria è sconosciuto, le API del framework Android considereranno il sistema in carica (o non in esecuzione a batteria) e non considereranno che la batteria è in esaurimento. Se l'interfaccia utente mostra l'icona della batteria, viene visualizzata con un punto esclamativo e la percentuale della batteria è pari allo 0%. Tuttavia, il dispositivo non si arresterà perché la batteria è in esaurimento e vengono programmati processi che richiedono ricarica o una batteria di ottima qualità.
Implementazione
Il codice predefinito di Android 9 potrebbe funzionare correttamente per il tuo dispositivo, ma è consigliabile apportare una modifica al kernel o all'HAL per riflettere accuratamente lo stato dell'alimentazione e della batteria del prodotto, come descritto sopra. Se Android 9 e versioni successive non rilevano un dispositivo di ricarica della classe di alimentatori Linux, per impostazione predefinita tutti i tipi di caricabatterie (AC, USB, wireless) avranno lo stato offline. Se tutti i caricabatterie sono offline, ma non viene rilevato alcun dispositivo con batteria, il sistema verrà comunque considerato in carica nel senso che è in funzione con alimentazione esterna, non a batteria, come descritto in precedenza.
Se il prodotto non ha una batteria ed è sempre collegato a un'alimentazione, è meglio implementare un driver charger della classe power_supply del kernel Linux per l'alimentazione CA o USB che imposti l'attributo sysfs
online su true
. In alternativa, puoi configurare la proprietà online del caricabatterie CA
in un HAL per l'integrità del tuo dispositivo. A tale scopo, implementa un HAL per la salute come descritto in Implementazione di Health 2.0.
Questo HAL di integrità personalizzato implementa una versione personalizzata di Health::getHealthInfo()
che modifica il valore di BatteryProperties.chargerAcOnline = true
.
Per iniziare, copia il file hardware/interfaces/health/2.0/default/Health.cpp
nella tua implementazione di Health HAL e modificalo in base al file README di Health 2.0.