Obsługa urządzeń bez baterii

Na tej stronie opisano, jak system Android obsługuje produkty, które mają wymienne baterie lub nie mają baterii wewnętrznych. Te ostatnie urządzenia są zamiast tego podłączone do zewnętrznego źródła zasilania, takiego jak gniazdko sieciowe lub port USB w innym urządzeniu.

Czy bateria jest obecna?

Poniższy kod może być używany przez aplikacje do wykrywania, czy urządzenie ma aktualnie obecną baterię:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

Zachowanie urządzenia bez baterii

Jeśli system Android nie wykrywa urządzenia akumulatorowego dla Twojego produktu, używane są następujące wartości domyślne związane z akumulatorem. Zwróć uwagę, że w wersji Androida 9 zmieniły się wartości domyślne. Ta tabela pokazuje różnice.

Stan baterii Android 9 i nowszy Android 8.1 i starsze
Obecny fałszywe prawda
Status nieznany ładowanie
Pozostała pojemność 0 100%
Zdrowie nieznany dobry
Stan online ładowarki AC niezmodyfikowany zmuszony do prawdy

Producenci mogą zmieniać ustawienia domyślne za pomocą sterownika power_supply jądra lub Health HAL .

Android 9 i nowszy

Android 9 usuwa część poprzedniego kodu dla urządzeń bez baterii, które domyślnie udawały, że bateria jest obecna, były ładowane w 100% i były w dobrym stanie z normalnym odczytem temperatury na termistorze.

Większość interfejsów API platformy, które zajmują się tymi informacjami, nadal obsługuje typowe sytuacje tak samo, jak poprzednio: system zostanie uznany za ładowany (to znaczy nie będzie działał na baterii) i nie zostanie uznany za mający niski poziom naładowania baterii. Jeśli interfejs użytkownika wyświetla ikonę baterii, pojawi się ona z wykrzyknikiem, a procent baterii będzie wyświetlany jako 0%. Ale urządzenie nie wyłączy się z powodu niskiego poziomu naładowania baterii, a zadania wymagające ładowania lub dobrej baterii zostaną zaplanowane.

Android 8.1 i starsze

Ponieważ stan baterii jest nieznany, interfejsy API systemu Android uznają, że system się ładuje (lub nie działa na baterii) i nie będą uważane za mające niski poziom naładowania baterii. Jeśli interfejs użytkownika wyświetla ikonę baterii, pojawi się ona z wykrzyknikiem, a procent baterii będzie wyświetlany jako 0%. Ale urządzenie nie wyłączy się z powodu niskiego poziomu naładowania baterii, a zadania wymagające ładowania lub dobrej baterii zostaną zaplanowane.

Realizacja

Domyślny kod systemu Android 9 może działać poprawnie na Twoim urządzeniu, ale zaleca się dokonanie zmiany jądra lub warstwy HAL, aby dokładnie odzwierciedlić stan zasilania i baterii Twojego produktu, jak opisano powyżej. Jeśli system Android 9 i nowszy nie wykrywa ładowarki klasy Linux , to domyślnie wszystkie typy ładowarek (AC, USB, Wireless) będą miały status offline . Jeśli wszystkie ładowarki są w trybie offline, ale nie zostanie wykryte żadne urządzenie akumulatorowe, system nadal będzie uznawany za ładowany w tym sensie, że działa na zewnętrznym zasilaniu, a nie na zasilaniu akumulatorowym, jak opisano wcześniej.

Jeśli produkt nie ma baterii i jest zawsze podłączony do źródła zasilania, najlepiej zaimplementować sterownik ładowarki klasy power_supply jądra systemu Linux dla źródła zasilania AC lub USB, który ustawia atrybut online sysfs na wartość true . Możesz też skonfigurować właściwość online ładowarki AC w ​​Health HAL dla swojego urządzenia. Aby to zrobić, zaimplementuj Health HAL zgodnie z opisem w Implementing Health 2.0 .

Ta niestandardowa warstwa HAL kondycji implementuje niestandardową wersję Health::getHealthInfo() , która modyfikuje wartość BatteryProperties.chargerAcOnline = true .

Aby rozpocząć, skopiuj plik hardware/interfaces/health/2.0/default/Health.cpp do własnej implementacji Health HAL i zmodyfikuj go zgodnie z Health 2.0 README .