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 nie jest wymagana.
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 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, wgraj go na telefon 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 uprawnienie aplikacji, która ma być uruchamiana przez tryb oszczędzania baterii, w sekcji 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 prawidłowo 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 pozwalaj jej na sterowanie interfejsami API na podstawie rutynowych działań. Zachowanie tej funkcji, gdy więcej niż 1 aplikacja próbuje użyć uprawnienia i interfejsów API, nie jest obsługiwane ani okreś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 w przypadku utraty przez aplikację połączenia z systemem, 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, jakiego zachowania będzie używać producent OEM, aby zdecydować, kiedy uruchomić rutynowy tryb oszczędzania baterii. Producenci OEM są więc odpowiedzialni za przetestowanie integracji, aby mieć pewność, ż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 procenta w interfejsie harmonogramu trybu 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 oszczędzania baterii. Gdy aplikacja wywołuje interfejs API za pomocą
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.