Questa pagina descrive come Android gestisce i prodotti con batterie rimovibili o senza batterie interne. I dispositivi di quest'ultima categoria 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 il dispositivo è dotato di batteria:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Comportamento del 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 i valori predefiniti sono cambiati nella release Android 9. Questa tabella mostra le differenze.
Stato batteria | Android 9 e versioni successive | Android 8.1 e versioni precedenti |
---|---|---|
Presenta | falso | true |
Stato | sconosciuto | in carica |
Capacità rimanente | 0 | 100% |
Salute | sconosciuto | buona |
Stato online del caricabatterie CA | non modificato | forzato su true |
I produttori possono modificare le impostazioni predefinite utilizzando un driver power_supply del kernel o HAL per la salute.
Android 9 e versioni successive
Android 9 rimuove parte del codice precedente per i dispositivi senza batteria che per impostazione predefinita simulavano la presenza di una batteria in carica al 100% e in buone condizioni con una lettura della temperatura normale 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 a 0%. Tuttavia, il dispositivo non si spegne per 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 spegne a causa della batteria in esaurimento e i job che richiedono la ricarica o una batteria in buone condizioni sono pianificati.
Implementazione
Il codice predefinito di Android 9 potrebbe funzionare correttamente per il tuo dispositivo, ma ti consigliamo di apportare una modifica al kernel o all'HAL per riflettere con precisione lo stato dell'alimentazione e della batteria del tuo prodotto, come descritto in precedenza. 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 tuo prodotto non ha una batteria ed è sempre collegato a una fonte di alimentazione, è meglio implementare un driver charger della classe power_supply del kernel Linux per la fonte di alimentazione CA o USB che imposta l'attributo sysfs
online su true
. In alternativa, puoi configurare la proprietà online del caricabatterie CA in un HAL per la salute per il tuo dispositivo. Per configurare la proprietà online del caricabatterie CA in un HAL per la salute, consulta HAL AIDL per la salute.
Questo HAL per la salute personalizzato implementa una versione personalizzata di Health::getHealthInfo()
che modifica il valore di BatteryProperties.chargerAcOnline = true
.
Per iniziare, copia il file
hardware/interfaces/health/aidl/default/Health.cpp
nella tua implementazione HAL per la salute e modificalo in base al
HAL AIDL per la salute.