Na tej stronie dowiesz się, jak Android radzi sobie z produktami, które mają wymienne baterie lub nie mają baterii. Te drugie są natomiast podłączone do zewnętrznego źródła zasilania, takiego jak gniazdko sieci elektrycznej 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. W Androidzie 9 te ustawienia zmieniły się. Ta tabela przedstawia różnice.
Stan baterii | Android 9 lub nowszy | Android 8.1 lub starszy |
---|---|---|
Prezentuj | fałsz | prawda |
Stan | brak informacji | ładowanie |
Pozostała pojemność | 0 | 100% |
Samo | brak informacji | dobrze |
Stan online ładowarki sieciowej | nie zmodyfikowano | wymuszone na wartość „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 platformy, które korzystają z tych informacji, obsługuje typowe sytuacje tak samo jak wcześniej: system jest uznawany za ładowanie (czyli nie działa z baterii) i nie niski poziom 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
Stan baterii jest nieznany, dlatego interfejsy API platformy Android będą uznawać, że system się ładuje (lub nie działa na baterii) i nie będą uważane za niski poziom baterii. Jeśli interfejs wyrenderuje ikonę baterii, pojawi się przy niej wykrzyknik, a poziom naładowania baterii będzie oznaczony 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 żadnego urządzenia z baterią, system wciąż uznaje się za ładowany w tym sensie, że działa z zewnątrz, a nie z baterii, jak opisano wcześniej.
Jeśli produkt nie ma baterii i jest zawsze podłączony do źródła zasilania, najlepiej zaimplementować sterownik klasy charger jądra Linux power_supply dla źródła zasilania AC lub USB, który ustawia atrybut online sysfs
na true
. Możesz też skonfigurować właściwość online ładowarki sieciowej
w Health HAL dla swojego urządzenia. W tym celu należy wdrożyć HAL zgodnie z opisem w tym artykule.
Ta niestandardowa HAL implementuje niestandardową wersję Health::getHealthInfo()
, która zmienia wartość BatteryProperties.chargerAcOnline = true
.
Najpierw 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.