Rutynowe oszczędzanie baterii

W Androidzie 10 wprowadzamy opcję harmonogramu oszczędzania baterii o nazwie na podstawie rutyny. Dzięki tej opcji aplikacja wybrana przez producenta OEM dostarcza sygnały 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 ustawień, że urządzenie jest skonfigurowane prawidłowo, użyj config w celu zastąpienia wartości config_batterySaverScheduleProvider na nazwa pakietu Twojej aplikacji.

Jeśli na przykład chcesz, aby pakiet aplikacji com.google.android.apps.turbo użyj ustawienia 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, Flash go w telefonie i wybierz kolejno Ustawienia > Bateria > Akumulatorowe Oszczędzanie > Harmonogram oszczędzania baterii. Powinna się pojawić opcja Na podstawie rutyny.

Domyślny próg wyłączenia

Nowe pole config_dynamicPowerSavingsDefaultDisableThreshold określa parametr poziom naładowania baterii, przy którym system wyłącza oszczędzanie baterii (jeśli było włączone) przez algorytm szeregowania na podstawie rutyny. Domyślne ustawienie systemu to 80%, ale możesz i ją zmienić.

Konfiguracja aplikacji

Uprawnienia

Interfejsy API potrzebne aplikacji do włączania oszczędzania baterii są chronione dzięki uprawnieniom 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 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 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. Daj POWER_SAVER tylko jednej aplikacji i zezwolić mu na kontrolowanie interfejsów API opartych na rutynie. 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. Zobacz Dokumentacja 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), 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 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. OEM jest więc odpowiedzialny za testowanie integracji, aby mieć pewność, sposób działania jest zgodny z oczekiwaniami. 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 opcję na podstawie rutyny w interfejsie harmonogramu oszczędzania baterii. Kiedy aplikacja wywołuje interfejs API, używając funkcji true, włącza się oszczędzanie 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 powinien włączać się automatycznie.
  • Jeśli aplikacja włączy oszczędzanie baterii, a użytkownik ręcznie zastąpi ją innymi wygaszacza, aby wyłączyć go ponownie (za pomocą Szybkich ustawień, Ustawień itp.), powinien NASTĘPNIE WYŁĄCZONE, dopóki użytkownik nie włączy go ponownie ręcznie albo nie podłączy urządzenia.