Rutynowe oszczędzanie baterii

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.