Los análisis de aligeramiento de red preferido (PNO) de Wi-Fi son análisis de Wi-Fi de bajo consumo que se realizan a intervalos regulares cuando un dispositivo está desconectado de Wi-Fi y la pantalla está apagada. Los análisis de PNO se usan para encontrar redes guardadas y conectarse a ellas. El framework programa estos análisis con el comando NL80211_CMD_START_SCHED_SCAN
. Para obtener más información, consulta nl80211.h.
Optimiza el uso de energía con la información de movilidad del dispositivo
En los dispositivos que ejecutan Android 9 o versiones anteriores, cuando el dispositivo se desconecta de Wi-Fi y la pantalla está apagada, los análisis de PNO se realizan a intervalos de 20 segundos durante los primeros tres análisis y, luego, se ralentizan a un análisis cada 60 segundos para todos los análisis posteriores. La búsqueda de PNO se detiene cuando se encuentra una red guardada o se enciende la pantalla.
Android 10 introduce un método opcional de API llamado setDeviceMobilityState()
en WifiManager
que aumenta el intervalo entre los análisis de PNO según el estado de movilidad del dispositivo para reducir el consumo de energía.
Los posibles estados de movilidad son los siguientes:
DEVICE_MOBILITY_STATE_UNKNOWN
: Movilidad desconocidaDEVICE_MOBILITY_STATE_HIGH_MVMT
: En bicicleta o en un vehículo motorizadoDEVICE_MOBILITY_STATE_LOW_MVMT
: Caminar o correrDEVICE_MOBILITY_STATE_STATIONARY
: No se mueve
Si el dispositivo está fijo, el framework de Android aumenta el intervalo entre los análisis de PNO de 60 a 180 segundos para reducir el consumo de energía. Esta optimización se realiza suponiendo que es poco probable que el dispositivo encuentre redes nuevas en las exploraciones de PNO cuando no se está moviendo.
Si el dispositivo se encuentra en cualquier otro estado de movilidad o si no se llama al método, el dispositivo usa el comportamiento de análisis de PNO predeterminado.
Implementación
Para implementar esta función de optimización de energía en un dispositivo que ejecute Android 10 o versiones posteriores, deriva la información de movilidad del dispositivo y llama al método setDeviceMobilityState()
desde una app del sistema personalizada.