Android 10 wprowadza opcję harmonogramu oszczędzania baterii o nazwie na podstawie rutyny. Ta opcja umożliwia aplikacji wybranej przez producenta OEM przesyłanie sygnałów do systemu w celu inteligentniejszego planowania oszczędzania baterii. Ta opcja wymaga skonfigurowania 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, użyj tej wartości konfiguracji:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
Telefon powinien teraz wyświetlić opcję na podstawie rutyny. Aby to sprawdzić, utwórz obraz, zainstaluj go na telefonie i otwórz Ustawienia > Bateria > Oszczędzanie baterii > Harmonogram oszczędzania baterii. Powinna się wyświetlić opcja na podstawie procedury.
Domyślny próg wyłączenia
Nowe 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 oparty na rutynie. Domyślna wartość systemu to 80%, ale możesz ją zmienić.
Konfiguracja aplikacji
Uprawnienia
Interfejsy API potrzebne do włączenia trybu oszczędzania baterii przez aplikację są chronione uprawnieniem android.permission.POWER_SAVER
. To uprawnienie do podpisu cyfrowego lub uprawnienie uprzywilejowane, więc przyznaj je aplikacji, która ma być uruchamiana przez tryb oszczędzania baterii w Twoim privapp-whitelist
.
Przykład przyznawania 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 wersji aplikacji w systemie, aplikacja nie będzie mogła uzyskać uprawnień ani poprawnie wywołać interfejsów API. System nie przekazuje żadnych informacji poza zwykłymi błędami uprawnień, więc sprawdź, czy możesz wywoływać interfejsy API i obserwować ich działanie.
Instalacja
Aby oparte na rutynie działało prawidłowo, musisz wstępnie zainstalować aplikację w obrazie systemu z wymaganymi uprawnieniami. Przyznaj uprawnienie POWER_SAVER
tylko jednej aplikacji i zezwól jej na kontrolowanie interfejsów API na podstawie rutynowych działań. Zachowanie tej funkcji, gdy więcej niż 1 aplikacja próbuje użyć uprawnień i interfejsów API, nie jest obsługiwane ani określone.
Włączanie oszczędzania baterii
Interfejsy API
Zakładając, że konfiguracja przebiegła pomyślnie, aplikacja OEM określona w konfiguracji powinna być w stanie 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ę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 utraty komunikacji z aplikacją system nadal wiedział, przy jakim poziomie naładowania baterii można bezpiecznie wyłączyć tryb oszczędzania baterii.
Ten interfejs API podlega zastąpieniom przez użytkownika i wyłączaniu oszczędzania baterii w taki sam sposób jak automatyczne oszczędzanie baterii na podstawie procentów. Więcej informacji znajdziesz w dokumentacji interfejsu API.
Aby sprawdzić, czy wywołania interfejsów API się powiodły, prześlij zapytanie do ustawień globalnych, aby sprawdzić, czy wartość ustawień podrzędnych zmieniła się zgodnie z wywołaniami interfejsu API.
Jeśli na przykład użytkownik wybierze tryb rutynowego oszczędzania baterii, a aplikacja wywołuje funkcję 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ć takie:
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0
Te wartości możesz sprawdzić za pomocą tego polecenia: adb
adb shell settings get global <setting-name>
Weryfikacja
Nie ma automatycznego sposobu weryfikacji tej funkcji, ponieważ nie ma możliwości określenia, jakie zachowanie OEM będzie miało wpływ na to, kiedy uruchomi rutynowy tryb oszczędzania baterii. Producenci OEM są więc odpowiedzialni za przetestowanie integracji, aby upewnić się, że jej działanie spełnia oczekiwania. W szczególności sprawdź, 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 osiągnie 15%.
- Użytkownik wybiera na podstawie rutyny w interfejsie harmonogramu oszczędzania baterii. Gdy aplikacja wywołuje interfejs API z parametrem
true
, włącza się tryb oszczędzania baterii. Dodatkowo oszczędzanie baterii wyłącza się automatycznie, jeśli urządzenie jest naładowane do wskazanego progu i jest odłączone od zasilania. - Użytkownik wybiera brak w interfejsie harmonogramu trybu 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.