Supporta i dispositivi senza batteria

In questa pagina viene descritto in che modo Android gestisce i prodotti rimovibili batterie o nessuna batteria interna. Questi ultimi dispositivi sono invece connessi da una fonte di alimentazione esterna, ad esempio una presa di corrente CA o una porta USB su un'altra 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 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 kernel alimentazione_alimentazione conducente o Health HAL.

Android 9 e versioni successive

Android 9 rimuove un codice precedente per l'assenza di batteria dispositivi che per impostazione predefinita simulavano la presenza di una batteria, sono stati ricaricati 100% ed era in buona salute con una lettura della temperatura normale sul termistore.

La maggior parte delle API framework che si occupano di queste informazioni continua a gestire come in precedenza: il sistema è considerato in carica (ovvero, non alimentato a batteria) e non saranno considerati la batteria è in esaurimento. Se l'interfaccia utente mostra l'icona della batteria, appaiono con un punto esclamativo e la percentuale della batteria è indicata come 0%. Tuttavia, il dispositivo non si arresterà a causa della batteria in esaurimento e per lavori che richiedono o una batteria di buona qualità.

Android 8.1 e versioni precedenti

Poiché lo stato della batteria è sconosciuto, le API del framework Android prenderanno in considerazione l'impianto sia in carica (o non stia utilizzando la batteria) e non la batteria è in esaurimento. Se la batteria viene visualizzata nell'interfaccia utente , viene visualizzata con un punto esclamativo e la percentuale della batteria è indicato come 0%. Tuttavia, il dispositivo non si arresterà a causa della batteria scarica e per i lavori che richiedono la ricarica o una batteria di buona qualità.

Implementazione

Il codice predefinito di Android 9 potrebbe funzionare correttamente dispositivo, ma è consigliabile apportare una modifica al kernel o all'HAL riflettano accuratamente lo stato di alimentazione e della batteria del prodotto, come descritto in alto. Se Android 9 e versioni successive non rileva un alimentatore Linux caricabatteria, per impostazione predefinita tutti i tipi di caricabatterie (CA, USB, wireless) dispongono di 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 è dotato di batteria ed è sempre collegato a una presa di corrente è meglio implementare una classe power_supply charger del kernel Linux driver per la fonte di alimentazione CA o USB che imposta l'attributo sysfs online a true. In alternativa, puoi configurare la proprietà online del caricabatterie CA in un HAL per l'integrità per il tuo dispositivo. A tale scopo, implementa un HAL per l'integrità come descritto in Implementazione Salute 2.0.

Questo HAL per l'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 alla tua implementazione di Health HAL e modificala in base allo standard Health 2.0 LEGGIMI.