Android
Doze Mode
Ricerca…
Osservazioni
Doze Mode è un insieme di modifiche e regole che mettono il telefono in stop quando inattivo.
Su Android 6.0 Marshmallow: la modalità Doze viene attivata dopo un po 'di tempo, lo schermo è spento, il dispositivo è fermo e funziona a batteria. Come puoi vedere nello schema sopra, quando la Modalità Doze viene attivata, il dispositivo non riceve alcun wakelock, accesso alla rete, job / sync, allarmi, scansioni GPS / Wi-fi.
Su Android 7.0 Nougat: immagina se il tuo telefono è in tasca (lo schermo è spento, funziona a batteria, ma non è fermo) potresti voler ottenere anche le funzionalità della modalità Doze, giusto? Ecco perché Google ha annunciato la modalità Doze estesa: viene eseguita quando lo schermo è spento, ma non fermo. Come puoi vedere in questo diagramma, solo Accesso alla rete e lavori / sincronizzazioni sono disabilitati. Si noti che il Doze esteso non sostituisce la prima modalità Doze. Lavorano insieme, a seconda dello stato del telefono (fisso o non). Ecco le distinzioni: Gli sviluppatori dovrebbero essere consapevoli che:
- Doze potrebbe mantenere il wakelock temporaneo e l'accesso alla rete per i messaggi GCM ad alta priorità (Google Cloud Messaging) (per i casi in cui l'utente necessita di una notifica immediata);
- I servizi in primo piano (come una riproduzione musicale) continueranno a funzionare.
Puoi trovare maggiori informazioni qui: https://developer.android.com/training/monitoring-device-state/doze-standby.html
Escludi app dall'uso della modalità doze
- Apri le impostazioni del telefono
- apri la batteria
- apri il menu e seleziona "ottimizzazione della batteria"
- dal menu a discesa seleziona "tutte le app"
- seleziona l'app che vuoi autorizzare
- seleziona "non ottimizzare"
Ora questa app mostrerà le app non ottimizzate.
isIgnoringBatteryOptimizations()
può controllare se è autorizzata chiamando isIgnoringBatteryOptimizations()
Whitelist di un'applicazione Android a livello di programmazione
La whitelist non disabilita la modalità doze per la tua app, ma puoi farlo usando i blocchi di rete e di attesa.
La whitelist di un'applicazione Android programmaticamente può essere eseguita come segue:
boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
if(!isIgnoringBatteryOptimizations){
Intent intent = new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, MY_IGNORE_OPTIMIZATION_REQUEST);
}
Il risultato dell'avvio dell'attività sopra può essere verificato dal seguente codice:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_IGNORE_OPTIMIZATION_REQUEST) {
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
if(isIgnoringBatteryOptimizations){
// Ignoring battery optimization
}else{
// Not ignoring battery optimization
}
}
}