Scansione offload di rete preferita Wi-Fi

Le scansioni Wi-Fi Preferred Network Offload (PNO) sono scansioni Wi-Fi a bassa potenza che si verificano a intervalli regolari quando un dispositivo viene disconnesso dal Wi-Fi e lo schermo è spento. Le scansioni PNO vengono utilizzate per trovare e connettersi alle reti salvate. Queste scansioni sono previste dal quadro utilizzando il NL80211_CMD_START_SCHED_SCAN comando. Per ulteriori informazioni, vedere nl80211.h .

Ottimizzazione del consumo energetico con le informazioni sulla mobilità dei dispositivi

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 è acceso.

Android 10 introduce un metodo API opzionale denominato setDeviceMobilityState() in WifiManager che aumenta l'intervallo tra PNO scansioni in base a stato mobilità del dispositivo per ridurre il consumo energetico.

I possibili stati di mobilità sono:

  • DEVICE_MOBILITY_STATE_UNKNOWN : la mobilità Unknown
  • DEVICE_MOBILITY_STATE_HIGH_MVMT : Su una bicicletta o in un veicolo a motore
  • DEVICE_MOBILITY_STATE_LOW_MVMT : camminando o correndo
  • DEVICE_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 si basa sul presupposto che è improbabile che il dispositivo trovi nuove reti nelle scansioni PNO quando il dispositivo non è in movimento.

Se il dispositivo è 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à power-ottimizzazione su un dispositivo con sistema operativo Android 10 o superiore, ricavare le informazioni di mobilità del dispositivo e chiamare la setDeviceMobilityState() metodo da un app sistema personalizzato.