Questa pagina descrive come Android gestisce i prodotti con batterie rimovibili o senza batterie interne. Questi ultimi dispositivi 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 ha una 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 batteria per il tuo prodotto, vengono utilizzati i seguenti valori predefiniti relativi alla batteria. Tieni presente che i valori predefiniti sono cambiati 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 | 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 Health HAL.
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, la ricarica al 100% e un buono stato con una lettura della temperatura normale sul termistore.
La maggior parte delle API framework che gestiscono queste informazioni continuano a gestire le situazioni comuni come in precedenza: il sistema è considerato in carica (ovvero non funziona a batteria) e non è considerato con batteria scarica. Se l'interfaccia utente disegna l'icona della batteria, questa apparirà con un punto esclamativo e la percentuale della batteria sarà 0%. Tuttavia, il dispositivo non si spegnerà a causa della batteria scarica e i lavori 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 framework Android considereranno il sistema in ricarica (o non in esecuzione a batteria) e non sarà considerato con batteria in esaurimento. Se l'interfaccia utente esegue il rendering dell'icona della batteria, questa viene visualizzata con un punto esclamativo e la percentuale della batteria è pari allo 0%. Tuttavia, il dispositivo non si spegnerà a causa della batteria scarica e i lavori che richiedono la ricarica o una batteria carica sono pianificati.
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 con precisione lo stato di alimentazione e batteria del tuo prodotto, come descritto in precedenza. Se Android 9 e versioni successive non rilevano un dispositivo di ricarica Linux power supply class, per impostazione predefinita tutti i tipi di caricabatterie (CA, USB, wireless) avranno lo stato offline. Se tutti i caricabatterie sono offline, ma non viene rilevato alcun dispositivo a batteria, il sistema verrà comunque considerato in carica nel senso che funziona 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, è consigliabile implementare un driver caricabatterie della classe power_supply del kernel Linux per la fonte di alimentazione CA o USB che imposta l'attributo online sysfs
su true
. In alternativa, puoi configurare la proprietà online del caricabatterie CA in un HAL di salute
per il tuo dispositivo. Per configurare la proprietà online del caricabatterie CA in un HAL di integrità,
consulta HAL AIDL di integrità.
Questa HAL personalizzata per la salute 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 di Health HAL e modificalo in base all'AIDL HAL di Health.