Obsługa urządzeń bez baterii

Na tej stronie opisano, jak Android obsługuje produkty z wymiennymi bateriami lub bez wewnętrznych baterii. Te drugie są podłączone do zewnętrznego źródła zasilania, takiego jak gniazdko sieciowe lub port USB na innym urządzeniu.

Czy jest bateria?

Aplikacje mogą używać tego kodu do wykrywania, czy na urządzeniu jest bateria:

```
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 baterii dla Twojego produktu, zostaną użyte te wartości domyślne dotyczące baterii. Pamiętaj, że domyślne wartości zostały zmienione w wersji Androida 9. Ta tabela pokazuje różnice.

Stan baterii Android 9 lub nowszy Android 8.1 lub starszy
Prezentowanie fałsz true
Stan brak informacji ładowanie
Pozostała pojemność 0 100%
Samo brak informacji dobrze
Stan online ładowarki sieciowej nie zmodyfikowano wymuszone na „prawda”

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

Android 9 lub nowszy

Android 9 usuwa część wcześniejszego kodu z urządzeń bez baterii, które domyślnie udawały, że bateria jest obecna, jest ładowana w 100% i jest w dobrym stanie, a jej termistor ma normalną temperaturę.

Większość interfejsów API frameworku, które zajmują się tymi informacjami, nadal obsługuje typowe sytuacje tak samo jak wcześniej: system jest uważany za ładowany (czyli nie działający na baterię) i nie jest uważany za mający niski poziom naładowania baterii. Jeśli ikona baterii jest wyświetlana w interfejsie, będzie zawierać wykrzyknik, a poziom naładowania baterii będzie wynosił 0%. Urządzenie nie wyłączy się z powodu słabej baterii, a zadania wymagające naładowania lub dobrej baterii są zaplanowane.

Android 8.1 lub starszy

Ponieważ stan baterii jest nieznany, interfejsy API Androida uznają, że system jest ładowany (czyli nie działa na baterii) i nie uznają, że ma niski poziom naładowania baterii. Jeśli interfejs renderuje ikonę baterii, będzie ona zawierać wykrzyknik, a poziom naładowania baterii będzie wynosił 0%. Urządzenie nie wyłączy się 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 interfejsie HAL, aby dokładnie odzwierciedlały stan zasilania i baterii Twojego produktu, jak opisano powyżej. Jeśli Android 9 lub nowszy nie wykryje urządzenia ładowarki Linux power supply class, domyślnie wszystkie typy ładowarek (AC, USB, bezprzewodowa) będą miały stan offline. Jeśli wszystkie ładowarki są offline, ale nie wykryto urządzenia z baterią, system będzie nadal uważany za ładujący się w tym sensie, że działa na zasilaniu zewnętrznym, a nie na baterii, 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 klasy charger (power_supply) jądra Linuksa dla źródła zasilania AC lub USB, który ustawia atrybut online sysfs na true. Możesz też skonfigurować właściwości online ładowarki AC w interfejsie Health HAL na urządzeniu. Aby to zrobić, zaimplementuj interfejs Health HAL zgodnie z opisem w artykule Wdrażanie Health 2.0.

Ten niestandardowy interfejs HAL Health 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łasnego wdrożenia Health HAL i zmodyfikuj go zgodnie z informacjami w Health 2.0 README.