Supporto di dispositivi senza batteria

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, come 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 attualmente 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 batteria per il tuo prodotto, vengono utilizzati i seguenti valori predefiniti relativi alla batteria. Nota 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à residua 0 100%
Salute sconosciuto Bene
Stato in linea del caricabatterie CA non modificato forzato a vero

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 parte del codice precedente 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 normale lettura della temperatura sul suo termistore.

La maggior parte delle API del framework che gestiscono queste informazioni continuano a gestire le situazioni comuni come in precedenza: il sistema verrà considerato in carica (ovvero non alimentato a batteria) e non verrà considerato con 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 spegnerà a causa della batteria scarica e verranno programmati i lavori che richiedono la ricarica o una buona batteria.

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 saranno considerate con 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 spegnerà a causa della batteria scarica e verranno programmati i lavori che richiedono la ricarica o una buona batteria.

Implementazione

Il codice predefinito di Android 9 potrebbe funzionare correttamente per il tuo dispositivo, ma si consiglia di apportare una modifica al kernel o all'HAL per riflettere accuratamente lo stato di alimentazione e batteria del tuo prodotto, come descritto sopra. Se Android 9 e versioni successive non rilevano un dispositivo di ricarica della classe di alimentazione Linux , per impostazione predefinita tutti i tipi di caricabatterie (CA, USB, wireless) avranno lo stato offline . Se tutti i caricatori sono offline ma non viene rilevato alcun dispositivo batteria, il sistema sarà comunque considerato in carica nel senso che è alimentato dall'alimentazione esterna e non dalla batteria, come descritto in precedenza.

Se il tuo prodotto non ha una batteria ed è sempre connesso a una fonte di alimentazione, è meglio implementare un driver del caricabatterie di classe power_supply del kernel Linux per la fonte di alimentazione CA o USB che imposta il suo attributo online sysfs su true . Oppure puoi configurare la proprietà online del caricabatterie CA in un Health HAL per il tuo dispositivo. Per eseguire questa operazione implementare un Health HAL come descritto in Implementazione di Health 2.0 .

Questo HAL Health 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 .