Ricerca di offload rete preferita

Le analisi PNO (Wi-Fi preferred network offload) sono ricerche di reti Wi-Fi a basso consumo che vengono eseguite a intervalli regolari quando un dispositivo si disconnette dalla rete Wi-Fi e lo schermo è spento. Le ricerche PNO vengono utilizzate per trovare reti salvate e connettersi a 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 viene attivato lo schermo.

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 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: A piedi o in corsa
  • DEVICE_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 si basa sul presupposto che è 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.