Obsługa urządzeń bez baterii

Na tej stronie opisano, jak system Android obsługuje produkty wyposażone w baterie wymienne lub nie posiadające baterii wewnętrznych. Te ostatnie urządzenia są zamiast tego podłączane do zewnętrznego źródła zasilania, takiego jak gniazdko elektryczne lub port USB w innym urządzeniu.

Czy jest akumulator?

Następujący kod może zostać wykorzystany przez aplikacje do wykrycia, czy w urządzeniu znajduje się aktualnie bateria:

```
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 wykryje urządzenia akumulatorowego dla Twojego produktu, zostaną użyte następujące wartości domyślne związane z baterią. Uwaga: ustawienia domyślne uległy zmianie w wersji Androida 9. Ta tabela pokazuje różnice.

Stan baterii Android 9 i nowsze Android 8.1 i starsze
Obecny FAŁSZ PRAWDA
Status nieznany ładowanie
Pozostała pojemność 0 100%
Zdrowie nieznany Dobry
Stan ładowarki sieciowej online niezmodyfikowany zmuszony do prawdy

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

Android 9 i nowsze

Android 9 usuwa część poprzedniego kodu 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 obsługujących te informacje w dalszym ciągu radzi sobie z typowymi sytuacjami w taki sam sposób jak poprzednio: system zostanie uznany za ładujący się (to znaczy nie działa na zasilaniu bateryjnym) i nie zostanie uznany za mający niski poziom naładowania baterii. Jeśli w interfejsie użytkownika pojawi się ikona baterii, pojawi się ona z wykrzyknikiem, a procent baterii będzie pokazany jako 0%. Jednak 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 platformy Android uznają, że system się ładuje (lub nie działa na zasilaniu bateryjnym) i nie zostaną uznane za mające słabą baterię. Jeśli interfejs użytkownika wyświetla ikonę baterii, pojawi się ona z wykrzyknikiem, a procent baterii będzie pokazany jako 0%. Jednak 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 w jądrze lub warstwie HAL, aby dokładnie odzwierciedlać stan zasilania i baterii Twojego produktu, jak opisano powyżej. Jeśli system Android 9 i nowszy nie wykryje ładowarki klasy zasilania Linux , domyślnie wszystkie typy ładowarek (AC, USB, bezprzewodowe) będą miały status offline . Jeśli wszystkie ładowarki są w trybie offline, ale nie wykryto żadnego urządzenia akumulatorowego, system nadal będzie uważany za ładujący w tym sensie, że działa na zasilaniu zewnętrznym, a nie akumulatorowym, jak opisano wcześniej.

Jeśli Twój produkt nie ma baterii i jest zawsze podłączony do źródła zasilania, najlepiej zaimplementować sterownik ładowarki klasy power_supply jądra Linux dla źródła zasilania AC lub USB, który ustawia jego atrybut online sysfs na true . Możesz też skonfigurować usługę 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 Health HAL 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 plikiem README Health 2.0 .