Scansione offload rete Wi-Fi preferita

Le scansioni PNO (Wi-Fi Preferred Network Offload) sono scansioni Wi-Fi a basso consumo 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, vedere nl80211.h .

Ottimizzazione del consumo energetico con 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 opzionale 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.

I possibili stati di mobilità sono:

  • DEVICE_MOBILITY_STATE_UNKNOWN : mobilità sconosciuta
  • DEVICE_MOBILITY_STATE_HIGH_MVMT : in bicicletta o in un veicolo a motore
  • DEVICE_MOBILITY_STATE_LOW_MVMT : camminare o correre
  • DEVICE_MOBILITY_STATE_STATIONARY : non in movimento

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 effettuata partendo dal presupposto che difficilmente il dispositivo troverà nuove reti nelle scansioni PNO quando il dispositivo non è in movimento.

Se il dispositivo si trova in qualsiasi 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 energetica su un dispositivo con Android 10 o versioni successive, ricavare le informazioni sulla mobilità del dispositivo e chiamare il metodo setDeviceMobilityState() da un'app di sistema personalizzata.