W Androidzie 10 wprowadzono opcję harmonogramu oszczędzania baterii o nazwie Na podstawie rutyny. Ta opcja umożliwia aplikacji wybranej przez producenta OEM przekazywanie sygnałów do systemu w celu bardziej inteligentnego planowania oszczędzania baterii. Ta opcja wymaga konfiguracji i jest opcjonalna.
Konfiguracja urządzenia
W tej sekcji opisujemy, jak skonfigurować urządzenie pod kątem opcji Na podstawie rutyny.
Specyfikacja dostawcy
Aby powiadomić interfejs Ustawienia, że urządzenie jest prawidłowo skonfigurowane, użyj nakładki konfiguracji, aby zastąpić wartość config_batterySaverScheduleProvider nazwą pakietu aplikacji. Jeśli na przykład chcesz, aby pakiet aplikacji com.google.android.apps.turbo kontrolował ustawienie Na podstawie rutyny, ustaw tę wartość konfiguracji:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
Aby to sprawdzić, utwórz obraz, wgraj go na urządzenie i otwórz Ustawienia.
Bateria > Oszczędzanie baterii > Harmonogram oszczędzania baterii. Pojawi się opcja Na podstawie rutyny.
Domyślny próg wyłączenia
Pole config_dynamicPowerSavingsDefaultDisableThreshold określa poziom naładowania baterii, przy którym system wyłącza oszczędzanie baterii, jeśli zostało ono włączone przez harmonogram Na podstawie rutyny. Domyślna wartość to 80%, ale możesz ją zmienić.
Konfiguracja aplikacji
Z tej sekcji dowiesz się, jak skonfigurować aplikację, aby korzystała z opcji Na podstawie rutyny.
Uprawnienia
Interfejsy API niezbędne do włączenia przez aplikację rutynowego oszczędzania baterii są chronione uprawnieniem android.permission.POWER_SAVER. Jest to uprawnienie związane z podpisem lub uprawnienie uprzywilejowane. Oznacza to, że aplikacja musi znajdować się w katalogu priv-app na obrazie systemu, a to uprawnienie musisz przyznać wyraźnie.
W przypadku aplikacji z uprawnieniami musisz przyznać uprawnienia w pliku XML konfiguracji systemu w katalogu /etc/permissions/ na tej samej partycji co aplikacja. Aby na przykład przyznać uprawnienie android.permission.POWER_SAVER aplikacji o nazwie pakietu com.google.android.apps.turbo:
<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
</permissions>
Jeśli nie przyznasz tego uprawnienia aplikacji w obrazie systemu, nie będzie ona mogła uzyskać uprawnień ani wywoływać interfejsów API. System nie przekazuje informacji zwrotnych poza standardowymi błędami uprawnień, dlatego ważne jest, aby sprawdzić, czy aplikacja może wywoływać interfejsy API i obserwować ich działanie.
Instalacja
Aby opcja Na podstawie rutyny działała prawidłowo, musisz wstępnie zainstalować aplikację w obrazie systemu z wymaganym uprawnieniem. Przyznaj uprawnienia android.permission.POWER_SAVER tylko jednej aplikacji i pozwól jej sterować interfejsami API rutyny „Na podstawie”. Jeśli więcej niż 1 aplikacja próbuje używać uprawnień i interfejsów API, działanie tej funkcji jest nieobsługiwane i nieokreślone.
Uruchamianie rutyny Oszczędzanie baterii
W tej sekcji opisujemy, jak aplikacja może wywoływać tryb Oszczędzanie baterii na podstawie rutyny za pomocą udostępnionych interfejsów API.
Interfejsy API
Jeśli konfiguracja się powiedzie, aplikacja OEM określona w konfiguracji może wywołać powiązaną metodę w PowerManager, aby włączyć tryb oszczędzania baterii:
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
Jeśli opcja harmonogramu Oszczędzanie baterii Na podstawie rutyny jest włączona, a aplikacja wywołuje tę metodę z wartością true parametru powerSaveHint, Oszczędzanie baterii włącza się. Określ disableThreshold, aby w przypadku braku komunikacji aplikacji z systemem system nadal znał procent baterii, przy którym można bezpiecznie wyłączyć Oszczędzanie baterii.
Ten interfejs API podlega zastąpieniom przez użytkownika i odroczeniu Oszczędzania baterii w taki sam sposób jak automatyczne Oszczędzanie baterii oparte na procentach. Więcej informacji znajdziesz w dokumentacji interfejsu API.
Aby sprawdzić, czy wywołania interfejsów API zostały wykonane prawidłowo, wyślij zapytanie o ustawienia globalne, aby potwierdzić, że wartość ustawienia pomocniczego zmieniła się zgodnie z wywołaniami interfejsu API.
Jeśli na przykład wybierzesz tryb oszczędzania baterii Na podstawie rutyny, a aplikacja wywoła setDynamicPowerSaveHint(true, 10), ustawienia globalne będą miały te wartości:
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1
Jeśli następnie wywołasz funkcję setDynamicPowerSaveHint(false, 25), wartości będą następujące:
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0
Możesz sprawdzić te wartości za pomocą tego polecenia adb:
adb shell settings get global <setting-name>
Weryfikacja
Nie ma automatycznego sposobu weryfikacji tej funkcji, ponieważ producent OEM określa zachowanie, które wywołuje tryb Oszczędzanie baterii na podstawie rutyny. Producenci OEM muszą przetestować integrację, aby sprawdzić, czy jej działanie jest zgodne z oczekiwaniami. Sprawdź w szczególności, czy urządzenie może wykonywać te czynności:
- Na podstawie wartości procentowej: jeśli w interfejsie Harmonogram oszczędzania baterii wybierzesz Na podstawie wartości procentowej i ustawisz 15%, Oszczędzanie baterii włączy się automatycznie tylko wtedy, gdy poziom naładowania baterii osiągnie 15%.
- Na podstawie rutyny: jeśli w interfejsie Harmonogram oszczędzania baterii wybierzesz opcję Na podstawie rutyny, oszczędzanie baterii włączy się, gdy aplikacja wywoła interfejs API z parametrem
true. Oszczędzanie baterii wyłącza się też automatycznie, gdy urządzenie naładuje się do wskazanego poziomu i zostanie odłączone od zasilania. - Brak: jeśli w interfejsie harmonogramu oszczędzania baterii wybierzesz opcję Brak, oszczędzanie baterii nigdy nie włączy się automatycznie.
- Ręczne zastąpienie: jeśli aplikacja włączy oszczędzanie baterii, a Ty ręcznie je wyłączysz (za pomocą szybkich ustawień, ustawień lub innych metod), pozostanie ono wyłączone, dopóki nie włączysz go ponownie ręcznie lub nie podłączysz urządzenia do zasilania.