Risparmio batteria di routine

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 della batteria. Questa opzione richiede la configurazione ed è facoltativa da implementare.

Configurazione del dispositivo

Specifica del fornitore

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

Ad esempio, se desideri che il pacchetto dell'app com.google.android.apps.turbo controlli l'impostazione basata sulla routine , imposta questo valore di configurazione:

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

Ora il telefono dovrebbe mostrare l'opzione basata sulla routine . Per verificare, crea la tua immagine, esegui il flashing su un telefono e vai su Impostazioni > Batteria > Risparmio batteria > Pianificazione risparmio batteria . Dovrebbe apparire l'opzione basata sulla routine .

Soglia disattivata predefinita

Il nuovo campo config_dynamicPowerSavingsDefaultDisableThreshold specifica il livello della batteria al quale il sistema disattiva il risparmio batteria, se è stato attivato dallo scheduler basato sulla routine . L'impostazione predefinita del sistema è 80%, ma è possibile modificarla.

Configurazione dell'app

Autorizzazioni

Le API necessarie affinché l'app attivi il risparmio energetico dall'app sono protette dall'autorizzazione android.permission.POWER_SAVER . Questa è un'autorizzazione firmata/privilegiata, quindi concedi all'app che desideri sia in grado di attivare il risparmio batteria questa autorizzazione nella tua privapp-whitelist .

Un 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 anticipatamente questa autorizzazione alla versione dell'app nell'immagine di sistema, l'app non potrà acquisire l'autorizzazione o chiamare correttamente le API. Il sistema non fornisce alcun feedback oltre ai consueti errori di autorizzazione, quindi verifica di poter chiamare le API e osservarne gli effetti.

Installazione

Affinché la routine basata su funzioni correttamente, è necessario preinstallare l'app sull'immagine del sistema con l'autorizzazione richiesta. Concedere a una sola app l'autorizzazione POWER_SAVER e consentirle di controllare le API di routine basate . Il comportamento della funzionalità quando più di un'app tenta di utilizzare l'autorizzazione e le API non è supportato né specificato.

Attivazione del risparmio batteria

API

Supponendo che la configurazione abbia avuto successo 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 basata sulla routine è abilitata e l'app chiama questo metodo con un valore true per powerSaveHint , il risparmio energetico viene attivato. disableThreshold in modo che, se l'app non riesce a comunicare con il sistema, il sistema sappia comunque a quale percentuale della batteria è sicuro disattivare il risparmio energetico.

Questa API è soggetta a modifiche da parte dell'utente e alla posticipazione del risparmio batteria allo stesso modo del risparmio batteria automatico basato su percentuale. Consulta la documentazione dell'API per ulteriori informazioni.

Per verificare che le API vengano chiamate correttamente, eseguire una query su Impostazioni globali per verificare che l'impostazione di supporto abbia modificato il valore in base alle chiamate API .

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

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Se quindi chiami setDynamicPowerSaveHint(false, 25) , i valori dovrebbero essere:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Puoi controllare questi valori usando questo comando adb :

adb shell settings get global <setting-name>

Verifica

Non esiste un modo automatico per verificare questa funzionalità perché non c'è modo di sapere quale comportamento utilizzerà un OEM per decidere quando attivare la modalità di risparmio batteria di routine. Gli OEM sono quindi responsabili di testare la loro integrazione per assicurarsi che il comportamento soddisfi le aspettative. In particolare verificare 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 al livello di soglia indicato e scollegato.
  • L'utente non seleziona nessuno nell'interfaccia utente della pianificazione del risparmio energetico. Il risparmio energetico non dovrebbe MAI attivarsi automaticamente.
  • Se l'app attiva il risparmio batteria e l'utente ignora manualmente il risparmio batteria per disattivarlo nuovamente (utilizzando Impostazioni rapide, Impostazioni, ecc.), dovrebbe RIMANERE SPENTO finché l'utente non lo riattiva manualmente o non collega il dispositivo.