Escaneo de descarga de red preferida Wi-Fi

Los escaneos de descarga de red preferida (PNO) de Wi-Fi son escaneos de Wi-Fi de baja potencia que ocurren a intervalos regulares cuando un dispositivo se desconecta de Wi-Fi y la pantalla está apagada. Los escaneos PNO se utilizan para buscar redes guardadas y conectarse a ellas. Estos análisis los programa el marco mediante el comando NL80211_CMD_START_SCHED_SCAN . Para obtener más información, consulte nl80211.h .

Optimización del uso de energía con información de movilidad del dispositivo

En dispositivos con Android 9 o versiones anteriores, cuando el dispositivo está desconectado de Wi-Fi y la pantalla está apagada, los escaneos PNO ocurren en intervalos de 20 segundos para los primeros tres escaneos, luego se reducen a un escaneo cada 60 segundos para todos los escaneos posteriores. El escaneo PNO se detiene cuando se encuentra una red guardada o se enciende la pantalla.

Android 10 introduce un método API opcional llamado setDeviceMobilityState() en WifiManager que aumenta el intervalo entre escaneos de PNO según el estado de movilidad del dispositivo para reducir el consumo de energía.

Los posibles estados de movilidad son:

  • DEVICE_MOBILITY_STATE_UNKNOWN : movilidad desconocida
  • DEVICE_MOBILITY_STATE_HIGH_MVMT : en bicicleta o en un vehículo de motor
  • DEVICE_MOBILITY_STATE_LOW_MVMT : Caminar o correr
  • DEVICE_MOBILITY_STATE_STATIONARY : No se mueve

Si el dispositivo está estacionario, el marco de Android aumenta el intervalo entre escaneos PNO de 60 segundos a 180 segundos para reducir el consumo de energía. Esta optimización se realiza asumiendo que es poco probable que el dispositivo encuentre nuevas redes en los escaneos de PNO cuando el dispositivo no está en movimiento.

Si el dispositivo se encuentra en cualquier otro estado de movilidad o si no se llama al método, el dispositivo utiliza el comportamiento de escaneo PNO predeterminado.

Implementación

Para implementar esta función de optimización de energía en un dispositivo con Android 10 o superior, obtenga la información de movilidad del dispositivo y llame al método setDeviceMobilityState() desde una aplicación del sistema personalizada.