Rutynowe oszczędzanie baterii

W Androidzie 10 wprowadzamy opcję harmonogramu oszczędzania baterii o nazwie na podstawie rutyny. Ta opcja umożliwia aplikacji wybranej przez producenta sprzętu 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 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>

Teraz telefon powinien wyświetlić opcję Na podstawie rutyny. Aby to sprawdzić, utwórz obraz, Flash go w telefonie i wybierz kolejno Ustawienia > Bateria > Akumulatorowe Oszczędzanie > 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ślne ustawienie systemu to 80%, ale możesz je zmienić.

Konfiguracja aplikacji

Uprawnienia

Interfejsy API potrzebne do włączenia trybu oszczędzania baterii przez aplikację są chronione uprawnieniem android.permission.POWER_SAVER. To jest uprawnienia do podpisu/uprawnień, przyznaj więc aplikację, którą chcesz aktywować oszczędzanie baterii w aplikacji 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 wstępnie tych uprawnień wersji aplikacji w systemie aplikacja nie może uzyskać tych uprawnień ani prawidłowo wywoływać interfejsów API. system nie przekazuje żadnych informacji poza normalnymi błędami dotyczącymi uprawnień, sprawdź, czy możesz wywoływać interfejsy API i obserwować ich efekty.

Instalacja

Aby funkcja Na podstawie rutyny działała prawidłowo, musisz wstępnie zainstalować aplikację i obraz systemu z wymaganymi uprawnieniami. Przyznaj uprawnienia POWER_SAVER tylko jednej aplikacji i pozwalaj jej na sterowanie interfejsami API na podstawie rutynowych działań. Zachowanie gdy więcej niż 1 aplikacja próbuje użyć tego uprawnienia, a interfejsy API są nieobsługiwany i nieokreślony.

Włączanie oszczędzania baterii

Interfejsy API

Zakładając, że konfiguracja się udała, aplikacja OEM określona w konfiguracji powinna możliwość wywołania powiązanej metody w usłudze PowerManager w celu aktywowania oszczędzanie 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 przez powerSaveHint, a następnie oszczędzanie baterii włącza się. Określ disableThreshold, tak aby aplikacja nie mogła się komunikować z: system nadal będzie znał poziom naładowania baterii, który można bezpiecznie włączyć wyłączyć oszczędzanie baterii.

Ten interfejs API może w taki sam sposób stosować ustawienia oszczędzania baterii przez użytkowników jako automatycznego oszczędzania baterii procentowo. Więcej informacji znajdziesz w dokumentacji interfejsu API.

Aby sprawdzić, czy interfejsy API są wywoływane, wykonaj globalne zapytanie, aby sprawdzić, czy wartość ustawienia bazowego zmienia się według wywołań interfejsu API.

Na przykład: jeśli użytkownik wybrał rutynowy tryb oszczędzania baterii, a aplikacja jest wywołującego 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

Możesz sprawdzić te wartości za pomocą tego polecenia adb:

adb shell settings get global <setting-name>

Weryfikacja

Nie można zweryfikować tej funkcji automatycznie, ponieważ nie można się o tym dowiedzieć Jakiego zachowania zastosuje producent OEM, aby zdecydować, kiedy włączyć rutynowe oszczędzanie baterii? i trybu uzyskiwania zgody. 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 wykonaj następujące zadania:

  • Użytkownik wybiera opcję na podstawie wartości procentowej w interfejsie harmonogramu oszczędzania baterii i 15%. Oszczędzanie baterii powinno włączyć się automatycznie TYLKO wtedy, gdy jak bateria jest naładowana do 15%.
  • Użytkownik wybiera na podstawie rutyny w interfejsie oszczędzania baterii. Gdy aplikacja wywołuje interfejs API z parametrem true, włącza się tryb oszczędzania baterii. Dodatkowo: oszczędzanie baterii automatycznie wyłącza się, gdy urządzenie jest naładowane określony próg i odłączony.
  • Użytkownik wybiera 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.