W Androidzie 10 wprowadziliśmy opcję harmonogramu oszczędzania baterii o nazwie na podstawie rutyny. Ta opcja umożliwia aplikacji wybranej przez producenta OEM w dostarczaniu sygnałów do systemu, co pozwala na bardziej inteligentne planowanie oszczędzania baterii. Ta opcja wymaga skonfigurowania i jest opcjonalna.
Konfiguracja urządzenia
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 np. chcesz, aby pakiet aplikacji com.google.android.apps.turbo
sterował ustawieniem na podstawie rutyny, ustaw tę wartość konfiguracji:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
Teraz telefon powinien 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ę pojawić opcja Na podstawie rutyny.
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 włączone przez algorytm szeregowania na podstawie rutyny. Domyślna wartość systemu to 80%, ale możesz ją zmienić.
Konfiguracja aplikacji
Uprawnienia
Interfejsy API potrzebne aplikacji do włączania oszczędzania baterii są chronione przez uprawnienie android.permission.POWER_SAVER
. Jest to uprawnienie do podpisu lub uprawnienia, więc przyznaj je aplikacji, która ma uruchamiać oszczędzanie baterii w privapp-whitelist
.
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 wstępnie tych uprawnień wersji aplikacji z obrazu systemu, aplikacja nie będzie mogła ich uzyskać ani prawidłowo wywołać interfejsów API. System nie dostarcza żadnych informacji poza typowymi błędami dotyczącymi uprawnień, dlatego sprawdź, czy możesz wywoływać interfejsy API i obserwować ich efekty.
Instalacja
Aby oparte na rutynie działało prawidłowo, musisz wstępnie zainstalować aplikację w obrazie systemu z wymaganymi uprawnieniami. Przyznaj tylko jednej aplikacji uprawnienie POWER_SAVER
i pozwól jej na kontrolowanie interfejsów API opartych na rutynach. Działanie tej funkcji, gdy więcej niż 1 aplikacja próbuje użyć uprawnień, a interfejsy API są nieobsługiwane i nieokreślone.
Włączanie oszczędzania baterii
Interfejsy API
Zakładając, że konfiguracja została przeprowadzona 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 włączona jest opcja harmonogramu oszczędzania baterii na podstawie rutyny, a aplikacja wywołuje tę metodę z wartością true
dla parametru powerSaveHint
, oszczędzanie baterii włącza się. Określ wartość disableThreshold
, aby system nadal znał poziom naładowania baterii, gdy aplikacja nie może się komunikować z systemem, aby wyłączyć oszczędzanie baterii.
Ten interfejs API podlega wyłączeniu przez użytkownika i wygasaniu funkcji oszczędzania baterii w taki sam sposób, jak automatyczne oszczędzanie baterii procentowe. Więcej informacji znajdziesz w dokumentacji interfejsu API.
Aby sprawdzić, czy interfejsy API są wywoływane, wykonaj globalne zapytanie w celu sprawdzenia, czy ustawienie kopii zapasowej zmieniło wartość 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)
, powinny one wyglądać tak:
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 ma możliwości określenia, jakie zachowanie OEM będzie wykorzystywać do podejmowania decyzji o uruchomieniu rutynowego trybu 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 zadania:
- Użytkownik wybiera na podstawie procenta w interfejsie harmonogramu oszczędzania baterii i wybiera 15%. Oszczędzanie baterii powinno włączyć się automatycznie TYLKO po osiągnięciu poziomu 15%.
- Użytkownik wybiera na podstawie rutyny w interfejsie oszczędzania baterii. Gdy aplikacja wywoła interfejs API za pomocą funkcji
true
, włączy się oszczędzanie 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 oszczędzanie baterii, a użytkownik ręcznie zmodyfikuje jego wyłączenie (za pomocą Szybkich ustawień, ustawień itp.), powinno ono pozostawać wyłączone, dopóki użytkownik nie włączy go z powrotem ręcznie albo nie podłącza do zasilania.