Android 10 introduce un'opzione di programmazione del risparmio energetico denominata In base alla routine. Questa opzione consente a un'app scelta dall'OEM di fornire indicatori al sistema per una pianificazione più intelligente del risparmio energetico. Questa opzione richiede la configurazione ed è facoltativa per l'implementazione.
Configurazione dispositivo
Specifica del provider
Per comunicare all'interfaccia utente 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 di app com.google.android.apps.turbo
controlla l'impostazione in base alla routine, imposta questo valore di configurazione:
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
Ora sullo smartphone dovrebbe essere visualizzata l'opzione In base alla routine. Per verificare, crea l'immagine, esegui il flashing dell'immagine su un telefono e vai a Impostazioni > Batteria > Risparmio energetico > Programmazione per il risparmio energetico. Dovrebbe essere visualizzata l'opzione In base alla routine.
Soglia di disattivazione predefinita
Il nuovo campo config_dynamicPowerSavingsDefaultDisableThreshold
specifica il livello della batteria a cui il sistema disattiva il risparmio energetico, se questo è stato attivato dal programma di pianificazione in base alla routine. Il valore predefinito di sistema è 80%, ma puoi modificarlo.
Configurazione app
Autorizzazioni
Le API necessarie all'app per attivare il risparmio energetico sono protette dall'autorizzazione android.permission.POWER_SAVER
. Si tratta di un'autorizzazione con firma/privilegiata, quindi concedi questa autorizzazione all'app che vuoi che possa attivare il risparmio batteria nel tuo 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 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 alcun feedback oltre ai consueti errori di autorizzazione, quindi verifica di poter chiamare le API e osservane gli effetti.
Installazione
Affinché in base alla routine funzioni correttamente, devi preinstallare l'app nell'immagine di sistema con l'autorizzazione richiesta. Concedi a una sola app l'autorizzazione POWER_SAVER
e consenti a quest'ultima di controllare le API in base alla routine. Il comportamento
della funzionalità quando più app provano a utilizzare l'autorizzazione e le API non sono
supportate e non sono specificate.
Attivare il risparmio energetico
API
Supponendo che la configurazione abbia avuto esito positivo finora, l'app OEM specificata nella configurazione dovrebbe essere in grado di chiamare correttamente il metodo associato in PowerManager per attivare il risparmio energetico:
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
Se l'opzione di programmazione del risparmio energetico in base alla routine è attivata 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, il sistema sappia comunque quale percentuale della batteria è consigliabile disattivare
il risparmio energetico.
Questa API è soggetta all'override dell'utente e alla posticipazione della modalità Risparmio energetico, proprio come per il risparmio energetico automatico basato su percentuale. Per ulteriori informazioni, consulta la documentazione dell'API.
Per verificare che le API vengano chiamate correttamente, le impostazioni della query sono 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 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 questo 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 verrà utilizzato dall'OEM per decidere quando attivare la modalità di risparmio energetico di routine. Gli OEM sono quindi responsabili di testare la 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 nella UI di pianificazione del risparmio energetico e seleziona 15%. Il risparmio energetico dovrebbe attivarsi automaticamente SOLO quando la batteria è al 15%.
- L'utente seleziona in base alla routine nell'interfaccia utente della programmazione 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 è carico fino al livello di soglia indicato e scollegato dalla corrente. - 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 Impostazioni rapide, Impostazioni e così via), il risparmio energetico deve rimanere disattivato finché l'utente non lo riattiva manualmente o non collega il dispositivo alla corrente.