Rutynowe oszczędzanie baterii

W Androidzie 10 wprowadzono opcję harmonogramu oszczędzania baterii zwaną rutynową . Ta opcja umożliwia aplikacji wybranej przez producenta OEM dostarczanie sygnałów do systemu w celu bardziej inteligentnego planowania oszczędzania baterii. Ta opcja wymaga konfiguracji i jest opcjonalna do wdrożenia.

Konfiguracja urzadzenia

Specyfikacja dostawcy

Aby powiadomić interfejs ustawień, że urządzenie jest poprawnie skonfigurowane, użyj nakładki konfiguracji, aby zastąpić wartość config_batterySaverScheduleProvider nazwą pakietu aplikacji.

Na przykład, jeśli chcesz, aby pakiet aplikacji com.google.android.apps.turbo kontrolował ustawienia oparte na rutynie , ustaw tę wartość konfiguracyjną:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

Teraz telefon powinien wyświetlić opcję w oparciu o rutynę . Aby to sprawdzić, utwórz obraz, sflashuj go na telefonie i wybierz Ustawienia > Bateria > Oszczędzanie baterii > Harmonogram oszczędzania baterii . Powinna pojawić się opcja oparta na rutynie .

Domyślny próg wyłączenia

Nowe pole config_dynamicPowerSavingsDefaultDisableThreshold określa poziom naładowania baterii, przy którym system wyłączy oszczędzanie baterii, jeśli zostało ono włączone przez oparty na rutynowym harmonogramie. Domyślna wartość systemu to 80%, ale można ją zmienić.

Konfiguracja aplikacji

Uprawnienia

Interfejsy API potrzebne aplikacji do włączenia oszczędzania baterii z poziomu aplikacji są chronione uprawnieniem android.permission.POWER_SAVER . Jest to uprawnienie oparte na podpisie/uprzywilejowane, więc przyznaj aplikacji, dla której chcesz uruchamiać oszczędzanie baterii, to uprawnienie na swojej privapp-whitelist .

Przykład przyznania aplikacji uprawnień privapp :

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

Jeśli nie udzielisz wcześniej tego uprawnienia wersji aplikacji w obrazie systemu, aplikacja nie będzie mogła uzyskać pozwolenia ani poprawnie wywołać interfejsów API. System nie dostarcza żadnych informacji poza zwykłymi błędami uprawnień, dlatego sprawdź, czy możesz wywołać interfejsy API i obserwować ich skutki.

Instalacja

Aby funkcja oparta na procedurze działała poprawnie, musisz wstępnie zainstalować aplikację na obrazie systemu z wymaganymi uprawnieniami. Nadaj tylko jednej aplikacji uprawnienie POWER_SAVER i pozwól jej kontrolować oparte na rutynowych API. Zachowanie tej funkcji, gdy więcej niż jedna aplikacja próbuje skorzystać z uprawnień, a interfejsy API są nieobsługiwane i nieokreślone.

Włączam oszczędzanie baterii

Pszczoła

Zakładając, że konfiguracja przebiegła pomyślnie, aplikacja OEM określona w konfiguracji powinna być w stanie pomyślnie wywołać powiązaną metodę w programie PowerManager w celu uruchomienia oszczędzania baterii:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Jeśli włączona jest opcja harmonogramu oszczędzania baterii w oparciu o rutynowe działania, a aplikacja wywołuje tę metodę z wartością true dla powerSaveHint , oszczędzanie baterii włącza się. Określ opcję disableThreshold , aby w przypadku, gdy aplikacja nie będzie mogła komunikować się z systemem, system nadal wiedział, przy jakim procencie naładowania baterii można bezpiecznie wyłączyć oszczędzanie baterii.

Ten interfejs API podlega zmianom użytkownika i odłożeniu oszczędzania baterii w taki sam sposób, jak automatyczne oszczędzanie baterii oparte na procentach. Więcej informacji można znaleźć w dokumentacji interfejsu API .

Aby sprawdzić, czy interfejsy API zostały pomyślnie wywołane, wykonaj zapytanie do ustawień globalnych, aby sprawdzić, czy ustawienie kopii zapasowej zmieniło wartość zgodnie z wywołaniami interfejsu API .

Na przykład, jeśli użytkownik wybrał rutynowy tryb oszczędzania baterii , a aplikacja wywołuje setDynamicPowerSaveHint(true, 10) , ustawienia globalne powinny mieć następujące wartości:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Jeśli następnie wywołasz setDynamicPowerSaveHint(false, 25) , wartości powinny być następujące:

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 sprawdzenia tej funkcji, ponieważ nie ma sposobu, aby dowiedzieć się, jakie zachowanie zastosuje producent OEM, aby zdecydować, kiedy uruchomić rutynowy tryb oszczędzania baterii. Producenci OEM są zatem odpowiedzialni za testowanie swojej integracji, aby upewnić się, że zachowanie spełnia oczekiwania. W szczególności należy sprawdzić, czy urządzenie może spełniać następujące zadania:

  • Użytkownik wybiera wartość procentową w interfejsie użytkownika harmonogramu oszczędzania baterii i wybiera 15%. Oszczędzanie baterii powinno włączyć się automatycznie TYLKO po osiągnięciu 15% poziomu baterii.
  • Użytkownik wybiera w oparciu o procedurę w interfejsie użytkownika harmonogramu oszczędzania baterii. Gdy aplikacja wywołuje interfejs API z true , włącza się oszczędzanie baterii. Dodatkowo oszczędzanie baterii wyłącza się automatycznie, jeśli urządzenie zostanie naładowane do wskazanego poziomu progowego i odłączone od zasilania.
  • Użytkownik nie wybiera żadnej opcji w interfejsie użytkownika harmonogramu 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 wyłączy oszczędzanie baterii (za pomocą Szybkich ustawień, Ustawień itp.), powinna POZOSTAĆ WYŁĄCZONA, dopóki użytkownik nie włączy jej ponownie ręcznie lub nie podłączy urządzenia.