Le scansioni Wi-Fi PNO (Preferred Network Offload) sono scansioni Wi-Fi a basso consumo energetico che
si verificano a intervalli regolari quando un dispositivo è disconnesso dal Wi-Fi e lo
schermo è spento. Le scansioni 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 energetico 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 scansioni PNO vengono eseguite a intervalli di 20 secondi per le prime tre scansioni, quindi rallentano a una scansione ogni 60 secondi per tutte le scansioni successive. La scansione PNO si interrompe quando viene trovata una rete salvata o lo schermo viene acceso.
Android 10 introduce un metodo API facoltativo denominato
setDeviceMobilityState()
in WifiManager
che aumenta l'intervallo tra
le scansioni PNO in base allo stato di mobilità del dispositivo per ridurre il consumo energetico.
Gli stati di mobilità possibili sono:
DEVICE_MOBILITY_STATE_UNKNOWN
: Mobilità sconosciutaDEVICE_MOBILITY_STATE_HIGH_MVMT
: In bicicletta o in un veicolo a motoreDEVICE_MOBILITY_STATE_LOW_MVMT
: Camminata o corsaDEVICE_MOBILITY_STATE_STATIONARY
: Non si muove
Se il dispositivo è fermo, il framework Android aumenta l'intervallo tra le scansioni PNO da 60 secondi a 180 secondi per ridurre il consumo energetico. Questa ottimizzazione viene eseguita presupponendo che il dispositivo non trovi nuove reti nelle scansioni PNO quando non è in movimento.
Se il dispositivo si trova in un altro stato di mobilità o se il metodo non viene chiamato, il dispositivo utilizza il comportamento di scansione PNO predefinito.
Implementazione
Per implementare questa funzionalità di ottimizzazione del consumo energetico su un dispositivo con Android
10 o versioni successive, deriva le informazioni sulla mobilità del dispositivo
e chiama il metodo setDeviceMobilityState()
da un'app di sistema personalizzata.