Questa pagina descrive il modo in cui Android gestisce i prodotti dotati di batterie rimovibili o privi di batterie interne. Questi ultimi dispositivi vanno invece collegati ad una fonte di alimentazione esterna, come una presa di corrente AC o una porta USB di un altro dispositivo.
È presente una batteria?
Il seguente codice può essere utilizzato dalle applicazioni per rilevare se il dispositivo ha una batteria presente:
```
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 a batteria per il tuo prodotto, vengono utilizzati i seguenti valori predefiniti relativi alla batteria. Tieni presente che le impostazioni predefinite sono cambiate nella versione Android 9. Questa tabella mostra le differenze.
Stato della batteria | Android 9 e versioni successive | Android 8.1 e versioni precedenti |
---|---|---|
Presente | falso | VERO |
Stato | sconosciuto | ricarica |
Capacità rimanente | 0 | 100% |
Salute | sconosciuto | Bene |
Stato online del caricabatterie CA | non modificato | forzato a vero |
I produttori possono modificare le impostazioni predefinite utilizzando un driver power_supply del kernel o un HAL Health .
Android 9 e versioni successive
Android 9 rimuove alcuni codici precedenti per i dispositivi senza batteria che per impostazione predefinita fingevano che fosse presente una batteria, che fosse caricata al 100% ed era in buona salute con una lettura della temperatura normale sul termistore.
La maggior parte delle API del framework che gestiscono queste informazioni continuano a gestire le situazioni comuni come in precedenza: il sistema viene considerato in carica (ovvero non in esecuzione con l'alimentazione a batteria) e non verrà considerato con la batteria scarica. Se l'interfaccia utente disegna l'icona della batteria, verrà visualizzata con un punto esclamativo e la percentuale della batteria verrà visualizzata come 0%. Ma il dispositivo non si spegne a causa della batteria scarica e sono programmati lavori che richiedono ricarica o una batteria in buone condizioni.
Android 8.1 e versioni precedenti
Poiché lo stato della batteria è sconosciuto, le API del framework Android considereranno il sistema in carica (o non alimentato a batteria) e non considereranno la batteria scarica. Se l'interfaccia utente esegue il rendering dell'icona della batteria, verrà visualizzata con un punto esclamativo e la percentuale della batteria verrà visualizzata come 0%. Ma il dispositivo non si spegne a causa della batteria scarica e sono programmati lavori che richiedono ricarica o una batteria in buone condizioni.
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 sopra. Se Android 9 e versioni successive non rilevano un dispositivo caricabatterie di classe alimentatore 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 batteria, il sistema verrà comunque considerato in carica, nel senso che funziona con alimentazione esterna e non con 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 del caricabatterie della classe power_supply del kernel Linux per la fonte di alimentazione CA o USB che imposta il suo attributo online sysfs
su true
. In alternativa, puoi configurare la proprietà online del caricabatterie CA in un HAL di integrità per il tuo dispositivo. A tale scopo, implementare un HAL di 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 HAL di Health e modificalo in base al README di Health 2.0 .