Risparmio energetico automatico

Android 10 introduce un'opzione di pianificazione del risparmio energetico chiamata In base alla routine. Questa opzione consente a un'app scelta dall'OEM di fornire segnali al sistema per una pianificazione più intelligente del risparmio energetico. Questa opzione richiede la configurazione ed è facoltativa.

Configurazione dispositivo

Specifica del fornitore

Per comunicare all'interfaccia utente delle impostazioni che il dispositivo è configurato correttamente, utilizza l'overlay di configurazione per sostituire il valore config_batterySaverScheduleProvider con il nome del pacchetto della tua app.

Ad esempio, se vuoi che il pacchetto app com.google.android.apps.turbo controlli l'impostazione In base alla routine, imposta questo valore di configurazione:

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

Ora lo smartphone dovrebbe mostrare l'opzione In base alla routine. Per verificare, crea l'immagine, caricala su uno smartphone e vai a Impostazioni > Batteria > Risparmio energetico > Pianificazione risparmio energetico. Dovrebbe essere visualizzata l'opzione In base alla routine.

Soglia di disattivazione predefinita

Il nuovo campo config_dynamicPowerSavingsDefaultDisableThreshold specifica un livello di batteria al quale il sistema disattiva il risparmio energetico, se è stato attivato dallo strumento di pianificazione in base alla routine. Il valore predefinito del sistema è 80%, ma puoi modificarlo.

Configurazione app

Autorizzazioni

Le API necessarie per attivare il risparmio batteria dall'app sono protette dall'autorizzazione android.permission.POWER_SAVER. Si tratta di un'autorizzazione con firma/privilegi, quindi concedi all'app che vuoi che possa attivare il risparmio batteria questa autorizzazione in privapp-whitelist.

Esempio di concessione dell'autorizzazione privapp a un'app:

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

Se non concedi in anticipo questa autorizzazione alla versione dell'app nell'immagine di sistema, l'app non può acquisire l'autorizzazione o chiamare correttamente le API. Il sistema non fornisce feedback oltre ai normali errori di autorizzazione, quindi verifica di poter chiamare le API e osservarne gli effetti.

Installazione

Affinché In base alla routine funzioni correttamente, devi preinstallare l'app sull'immagine di sistema con l'autorizzazione richiesta. Concedi l'autorizzazione POWER_SAVER a una sola app e consentile di controllare in base alle API di routine. Il comportamento della funzionalità quando più di un'app tenta di utilizzare l'autorizzazione e le API è non supportato e non specificato.

Attivare il risparmio energetico

API

Supponendo che la configurazione sia riuscita finora, l'app OEM specificata nella configurazione dovrebbe essere in grado di chiamare correttamente il metodo associato in PowerManager per attivare il risparmio batteria:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Se l'opzione di pianificazione del risparmio energetico in base alla routine è abilitata e l'app chiama questo metodo con un valore true per powerSaveHint, il risparmio energetico viene attivato. Specifica disableThreshold in modo che, se l'app non riesce a comunicare con il sistema, quest'ultimo sappia comunque a quale percentuale di batteria è sicuro disattivare il risparmio energetico.

Questa API è soggetta agli override degli utenti e al rinvio del risparmio energetico nello stesso modo del risparmio energetico automatico basato sulla percentuale. Per saperne di più, consulta la documentazione dell'API.

Per verificare che le API vengano chiamate correttamente, esegui una query sulle impostazioni globali per verificare che il valore dell'impostazione di supporto sia cambiato in base alle chiamate API.

Ad esempio, se l'utente ha selezionato la modalità Risparmio energetico di routine e l'app chiama setDynamicPowerSaveHint(true, 10), le impostazioni globali devono avere questi valori:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Se poi chiami setDynamicPowerSaveHint(false, 25), i valori devono essere:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Puoi controllare questi valori utilizzando il comando adb:

adb shell settings get global <setting-name>

Verifica

Non esiste un modo automatico per verificare questa funzionalità perché non è possibile sapere quale comportamento utilizzerà un OEM per decidere quando attivare la modalità di risparmio energetico di routine. Pertanto, gli OEM sono responsabili del test della loro integrazione per assicurarsi che il comportamento soddisfi le aspettative. In particolare, verifica che il dispositivo possa svolgere le seguenti attività:

  • L'utente seleziona In base alla percentuale nell'interfaccia utente della pianificazione del risparmio energetico e seleziona 15%. Il risparmio energetico dovrebbe attivarsi automaticamente SOLO quando la batteria raggiunge il 15%.
  • L'utente seleziona In base alla routine nell'interfaccia utente della pianificazione del risparmio energetico. Quando l'app chiama l'API con true, il risparmio energetico si attiva. Inoltre, il risparmio energetico si disattiva automaticamente se il dispositivo viene caricato fino al livello di soglia indicato e scollegato.
  • L'utente seleziona Nessuno nell'interfaccia utente della pianificazione del risparmio energetico. Il risparmio energetico NON deve MAI attivarsi automaticamente.
  • Se l'app attiva il risparmio energetico e l'utente lo disattiva manualmente (utilizzando le Impostazioni rapide, le Impostazioni e così via), il risparmio energetico deve rimanere disattivato finché l'utente non lo riattiva manualmente o non collega il dispositivo alla corrente.