W Androidzie 10 wprowadzono opcję harmonogramu oszczędzania baterii o nazwie na podstawie rutyny. Ta opcja umożliwia aplikacji wybranej przez producenta OEM wysyłanie sygnałów do systemu w celu bardziej inteligentnego planowania oszczędzania baterii. Ta opcja wymaga konfiguracji i jest opcjonalna.
Konfiguracja urządzenia
Specyfikacja dostawcy
Aby powiadomić interfejs ustawień, ż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>
Na telefonie powinna się teraz wyświetlać opcja na podstawie rutyny. Aby to sprawdzić, skompiluj obraz, wgraj go na telefon i otwórz Ustawienia > Bateria > Oszczędzanie baterii > Harmonogram oszczędzania baterii. Powinna się pojawić opcja na podstawie procedury.
Domyślny próg wyłączenia
Nowe pole config_dynamicPowerSavingsDefaultDisableThreshold
określa poziom 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
Uprawnienia
Interfejsy API potrzebne aplikacji do włączania trybu oszczędzania baterii są chronione uprawnieniem android.permission.POWER_SAVER
. Jest to uprawnienie związane z podpisem lub uprawnienie uprzywilejowane, więc przyznaj je w privapp-whitelist
aplikacji, która ma mieć możliwość włączania trybu oszczędzania baterii.
Przykład przyznania aplikacji uprawnienia privapp
:
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
Jeśli nie przyznasz tego uprawnienia z wyprzedzeniem w wersji aplikacji na obrazie systemu, aplikacja nie będzie mogła uzyskać tego uprawnienia ani prawidłowo wywoływać interfejsów API. System nie przekazuje żadnych informacji zwrotnych poza zwykłymi błędami uprawnień, więc sprawdź, czy możesz wywoływać interfejsy API i obserwować ich działanie.
Instalacja
Aby funkcja na podstawie rutyny działała prawidłowo, musisz wstępnie zainstalować aplikację w obrazie systemu z wymaganym uprawnieniem. Przyznaj tylko jednej aplikacji uprawnienie POWER_SAVER
i zezwalaj jej na sterowanie na podstawie interfejsów API dotyczących rutyn. Działanie funkcji, gdy więcej niż 1 aplikacja próbuje używać uprawnień i interfejsów API, jest nieobsługiwane i nieokreślone.
Włączanie oszczędzania baterii
Interfejsy API
Zakładając, że konfiguracja przebiegła pomyślnie, aplikacja OEM określona w konfiguracji powinna móc wywołać powiązaną metodę w klasie PowerManager, aby włączyć tryb oszczędzania baterii:
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
Jeśli opcja harmonogramu oszczędzania baterii na podstawie rutyny jest włączona, a aplikacja wywołuje tę metodę z wartością true
dla parametru powerSaveHint
, oszczędzanie baterii włącza się. Określ wartość disableThreshold
, aby w przypadku braku komunikacji aplikacji z systemem system nadal wiedział, przy jakim poziomie baterii można bezpiecznie wyłączyć tryb oszczędzania 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 sprawdzić, czy wartość ustawienia bazowego zmieniła się zgodnie z wywołaniami interfejsu API.
Jeśli na przykład użytkownik wybrał tryb rutynowego oszczędzania baterii, a aplikacja wywołuje setDynamicPowerSaveHint(true, 10)
, ustawienia globalne powinny mieć 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 powinny być 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ż nie można przewidzieć, jak producent OEM zdecyduje, kiedy włączyć tryb oszczędzania baterii. Dlatego producenci OEM są odpowiedzialni za przetestowanie integracji, aby upewnić się, że jej działanie jest zgodne z oczekiwaniami. Sprawdź w szczególności, czy urządzenie może wykonywać te czynności:
- Użytkownik wybiera na podstawie procentu w interfejsie harmonogramu oszczędzania baterii i wybiera 15%. Oszczędzanie baterii powinno włączać się automatycznie TYLKO wtedy, gdy poziom naładowania baterii spadnie do 15%.
- W interfejsie harmonogramu oszczędzania baterii użytkownik wybiera na podstawie rutyny. Gdy aplikacja wywoła interfejs API z parametrem
true
, włączy się oszczędzanie baterii. Oszczędzanie baterii wyłącza się automatycznie, gdy urządzenie zostanie naładowane do wskazanego poziomu i odłączone od zasilania. - Użytkownik wybierze brak w interfejsie harmonogramu oszczędzania baterii. Oszczędzanie baterii NIGDY nie powinno włączać się automatycznie.
- Jeśli aplikacja włączy tryb oszczędzania baterii, a użytkownik ręcznie wyłączy go ponownie (za pomocą Szybkich ustawień, Ustawień itp.), tryb ten powinien pozostać wyłączony, dopóki użytkownik nie włączy go ponownie ręcznie lub nie podłączy urządzenia do ładowania.