Routinemäßiger Batteriesparmodus

Android 10 führt eine Zeitplanoption für den Energiesparmodus namens „Routinebasiert“ ein. Mit dieser Option kann eine vom OEM ausgewählte App Signale an das System senden, um eine intelligentere Energiesparplanung zu ermöglichen. Diese Option erfordert eine Konfiguration und kann optional implementiert werden.

Gerätekonfiguration

Anbieterangabe

Um die Benutzeroberfläche „Einstellungen“ darüber zu informieren, dass das Gerät korrekt konfiguriert ist, überschreiben Sie mithilfe Ihres Konfigurations-Overlays den Wert config_batterySaverScheduleProvider “ mit dem Paketnamen Ihrer App.

Wenn Sie beispielsweise möchten, dass das App-Paket com.google.android.apps.turbo die Einstellung „basierend auf Routine“ steuert, legen Sie diesen Konfigurationswert fest:

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

Jetzt sollte auf dem Telefon die Option „ Auf Routine basierend “ angezeigt werden. Um dies zu überprüfen, erstellen Sie Ihr Image, flashen Sie es auf ein Telefon und navigieren Sie zu Einstellungen > Akku > Akkusparmodus > Akkusparplan . Die Option „Auf Routine basierend “ sollte angezeigt werden.

Standardmäßiger Ausschaltschwellenwert

Das neue Feld config_dynamicPowerSavingsDefaultDisableThreshold gibt einen Batteriestand an, bei dem das System den Batteriesparmodus ausschaltet, wenn er vom Routineplaner aktiviert wurde. Der Systemstandardwert beträgt 80 %, Sie können ihn jedoch ändern.

App-Konfiguration

Berechtigungen

Die APIs, die die App benötigt, um den Batteriesparmodus über die App zu aktivieren, sind durch die Berechtigung android.permission.POWER_SAVER geschützt. Dies ist eine Signatur/privilegierte Berechtigung. Erteilen Sie daher der App, die den Batteriesparmodus auslösen soll, diese Berechtigung in Ihrer privapp-whitelist .

Ein Beispiel für die Erteilung der privapp Berechtigung für eine App:

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

Wenn Sie diese Berechtigung nicht vorab für die Version der App im Systemabbild erteilen, kann die App die Berechtigung nicht erwerben oder die APIs nicht ordnungsgemäß aufrufen. Das System liefert über die üblichen Berechtigungsfehler hinaus kein Feedback. Stellen Sie daher sicher, dass Sie die APIs aufrufen und ihre Auswirkungen beobachten können.

Installation

Damit die Routine ordnungsgemäß funktioniert, müssen Sie die App mit der erforderlichen Berechtigung auf dem Systemabbild vorinstallieren. Erteilen Sie nur einer App die Berechtigung POWER_SAVER und erlauben Sie ihr, die App basierend auf Routine- APIs zu steuern. Das Verhalten der Funktion, wenn mehr als eine App versucht, die Berechtigung und APIs zu verwenden, wird nicht unterstützt und ist nicht spezifiziert.

Auslösen des Batteriesparmodus

APIs

Vorausgesetzt, die Einrichtung ist bisher erfolgreich, sollte die in der Konfiguration angegebene OEM-App in der Lage sein, die zugehörige Methode in PowerManager erfolgreich aufzurufen, um den Batteriesparmodus auszulösen:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Wenn die Option „Basierend auf routinemäßigem Energiesparplan“ aktiviert ist und die App diese Methode mit einem true Wert für powerSaveHint aufruft, wird der Energiesparmodus aktiviert. Geben Sie disableThreshold an, damit das System auch dann weiß, bei welchem ​​Batterieprozentsatz es sicher ist, den Batteriesparmodus auszuschalten, wenn die App nicht mit dem System kommunizieren kann.

Diese API unterliegt auf die gleiche Weise wie der prozentuale automatische Energiesparmodus den Benutzerüberschreibungen und dem Energiesparmodus. Weitere Informationen finden Sie in der API-Dokumentation .

Um zu überprüfen, ob die APIs erfolgreich aufgerufen wurden, fragen Sie die globalen Einstellungen ab, um zu überprüfen, ob sich der Wert der Hintergrundeinstellung entsprechend den API-Aufrufen geändert hat.

Wenn der Benutzer beispielsweise den routinemäßigen Energiesparmodus ausgewählt hat und die App setDynamicPowerSaveHint(true, 10) aufruft, sollten die globalen Einstellungen diese Werte haben:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Wenn Sie dann setDynamicPowerSaveHint(false, 25) aufrufen, sollten die Werte sein:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Sie können diese Werte mit diesem adb Befehl überprüfen:

adb shell settings get global <setting-name>

Überprüfung

Es gibt keine automatisierte Möglichkeit, diese Funktion zu überprüfen, da nicht bekannt ist, welches Verhalten ein OEM verwenden wird, um zu entscheiden, wann der routinemäßige Batteriesparmodus ausgelöst wird. OEMs sind daher dafür verantwortlich, ihre Integration zu testen, um sicherzustellen, dass das Verhalten den Erwartungen entspricht. Stellen Sie insbesondere sicher, dass das Gerät folgende Aufgaben erfüllen kann:

  • Der Benutzer wählt basierend auf dem Prozentsatz in der Benutzeroberfläche des Energiesparplans aus und wählt 15 % aus. Der Batteriesparmodus sollte NUR dann automatisch aktiviert werden, wenn der Akkustand 15 % erreicht.
  • Der Benutzer wählt basierend auf der Routine in der Benutzeroberfläche des Energiesparplans aus. Wenn die App die API mit true aufruft, wird der Batteriesparmodus aktiviert. Darüber hinaus schaltet sich der Batteriesparmodus automatisch aus, wenn das Gerät bis zum angegebenen Schwellenwert aufgeladen und vom Stromnetz getrennt wird.
  • Der Benutzer wählt „Keine“ in der Benutzeroberfläche des Energiesparplans aus. Der Batteriesparmodus sollte NIEMALS automatisch aktiviert werden.
  • Wenn die App den Energiesparmodus aktiviert und der Benutzer den Energiesparmodus manuell überschreibt, um ihn wieder auszuschalten (über Schnelleinstellungen, Einstellungen usw.), sollte er AUSGESCHALTET BLEIBEN, bis der Benutzer ihn entweder manuell wieder einschaltet oder das Gerät anschließt.