Obsługa urządzeń bez baterii

Z tego artykułu dowiesz się, jak Android obsługuje produkty z wyjmowanymi bateriami lub bez baterii wewnętrznych. Te urządzenia są podłączane do zewnętrznego źródła zasilania, takiego jak gniazdko elektryczne lub port USB na innym urządzeniu.

Czy bateria jest obecna?

Aplikacje mogą używać tego kodu, aby wykrywać, czy urządzenie ma baterię:

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

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

Działanie urządzenia bez baterii

Jeśli Android nie wykryje urządzenia z baterią w przypadku Twojego produktu, używane są te domyślne wartości związane z baterią: Pamiętaj, że w wersji Androida 9 domyślne ustawienia uległy zmianie. W tej tabeli przedstawiamy różnice.

Stan baterii Android 9 lub nowszy Android 8.1 i starsze wersje
Prezentuj fałsz true
Stan nieznany ładowanie
Pozostała pojemność 0 100%
Samo nieznany dobrze
Stan online ładowarki AC nie zmodyfikowano, wymuszone na wartość „prawda”

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

Android 9 lub nowszy

Android 9 usuwa część wcześniejszego kodu dla urządzeń bez baterii, które domyślnie symulowały obecność baterii, ładowanie do 100% i dobry stan z normalnym odczytem temperatury na termistorze.

Większość interfejsów API platformy, które obsługują te informacje, nadal radzi sobie z typami sytuacji w taki sam sposób jak wcześniej: system jest uznawany za ładowany (czyli nie działa na baterii) i nie jest uznawany za mający niski poziom baterii. Jeśli interfejs użytkownika narysuje ikonę baterii, pojawi się ona z wykrzyknikiem, a poziom naładowania baterii będzie wynosić 0%. Urządzenie nie wyłączy się jednak z powodu niskiego poziomu baterii, a zadania wymagające ładowania lub dobrej baterii są zaplanowane.

Android 8.1 i starsze wersje

Ponieważ stan baterii jest nieznany, interfejsy API platformy Android będą uważać, że system jest ładowany (lub nie jest zasilany bateryjnie) i nie będą go traktować jako urządzenia z niskim poziomem baterii. Jeśli interfejs użytkownika renderuje ikonę baterii, pojawi się ona z wykrzyknikiem, a poziom naładowania baterii będzie wynosić 0%. Urządzenie nie wyłączy się jednak z powodu słabej baterii, a zadania wymagające ładowania lub dobrej baterii są zaplanowane.

Implementacja

Domyślny kod Androida 9 może działać prawidłowo na Twoim urządzeniu, ale zalecamy wprowadzenie zmian w jądrze lub HAL, aby dokładnie odzwierciedlać stan zasilania i baterii produktu, jak opisano wcześniej. Jeśli Android 9 lub nowszy nie wykryje urządzenia ładującego zasilacza Linux class, domyślnie wszystkie typy ładowarek (AC, USB, bezprzewodowe) będą miały stan offline. Jeśli wszystkie ładowarki są offline, ale nie wykryto urządzenia z baterią, system nadal będzie uznawany za ładowany, ponieważ działa na zasilaniu zewnętrznym, a nie na baterii, jak opisano wcześniej.

Jeśli produkt nie ma baterii i jest zawsze podłączony do źródła zasilania, najlepiej wdrożyć sterownik ładowarki klasy power_supply jądra systemu Linux dla źródła zasilania AC lub USB, który ustawia atrybut online na true.sysfs Możesz też skonfigurować właściwość online ładowarki AC w warstwie HAL Health na urządzeniu. Aby skonfigurować właściwość online ładowarki AC w warstwie HAL Health, zapoznaj się z sekcją Health AIDL HAL.

Ten niestandardowy interfejs HAL Health implementuje niestandardową wersję Health::getHealthInfo(), która modyfikuje wartość BatteryProperties.chargerAcOnline = true.

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