Le ricerche di reti Wi-Fi preferite (PNO) sono ricerche Wi-Fi a basso consumo che si verificano a intervalli regolari quando un dispositivo è disconnesso dal Wi-Fi e lo schermo è spento. Le ricerche PNO vengono utilizzate per trovare e connettersi alle reti salvate. Queste scansioni vengono pianificate dal framework utilizzando il comando NL80211_CMD_START_SCHED_SCAN
. Per ulteriori informazioni, consulta
nl80211.h.
Ottimizzare il consumo di energia con le informazioni sulla mobilità del dispositivo
Sui dispositivi con Android 9 o versioni precedenti, quando il dispositivo è disconnesso dal Wi-Fi e lo schermo è spento, le ricerche PNO vengono eseguite a intervalli di 20 secondi per le prime tre ricerche, quindi rallentano a una ricerca ogni 60 secondi per tutte le ricerche successive. La ricerca di reti PNO si interrompe quando viene trovata una rete salvata o quando lo schermo viene attivato.
Android 10 introduce un metodo API facoltativo denominato
setDeviceMobilityState()
in WifiManager
che aumenta l'intervallo tra le ricerche PNO in base allo stato di mobilità del dispositivo per ridurre il consumo di energia.
I possibili stati di mobilità sono:
DEVICE_MOBILITY_STATE_UNKNOWN
: Mobilità sconosciutaDEVICE_MOBILITY_STATE_HIGH_MVMT
: In bicicletta o in un veicolo a motoreDEVICE_MOBILITY_STATE_LOW_MVMT
: a piedi o in corsaDEVICE_MOBILITY_STATE_STATIONARY
: Nessuna attività
Se il dispositivo è fermo, il framework Android aumenta l'intervallo tra le ricerche PNO da 60 a 180 secondi per ridurre il consumo di energia. Questa ottimizzazione viene eseguita presupponendo che sia improbabile che il dispositivo trovi nuove reti nelle scansioni PNO quando non è in movimento.
Se il dispositivo è in un altro stato di mobilità o se il metodo non viene chiamato, il dispositivo utilizza il comportamento di ricerca PNO predefinito.
Implementazione
Per implementare questa funzionalità di ottimizzazione della potenza su un dispositivo con Android 10 o versioni successive, ricava le informazioni sulla mobilità del dispositivo e chiama il metodo setDeviceMobilityState()
da un'app di sistema personalizzata.