Les analyses PNO (Preferred Network Offload) du Wi-Fi sont des analyses Wi-Fi à faible consommation d'énergie qui se produisent à intervalles réguliers lorsqu'un appareil est déconnecté du Wi-Fi et que l'écran est éteint. Les analyses PNO sont utilisées pour trouver et se connecter aux réseaux enregistrés. Ces analyses sont planifiées par le framework à l'aide de la commande NL80211_CMD_START_SCHED_SCAN
. Pour en savoir plus, consultez nl80211.h.
Optimiser la consommation d'énergie grâce aux informations sur la mobilité de l'appareil
Sur les appareils équipés d'Android 9 ou version antérieure, lorsque l'appareil est déconnecté du Wi-Fi et que l'écran est éteint, les analyses PNO ont lieu à intervalles de 20 secondes pour les trois premières analyses, puis ralentissent à une analyse toutes les 60 secondes pour toutes les analyses suivantes. L'analyse PNO s'arrête lorsqu'un réseau enregistré est trouvé ou lorsque l'écran est allumé.
Android 10 introduit une méthode d'API facultative nommée setDeviceMobilityState()
dans WifiManager
, qui augmente l'intervalle entre les analyses PNO en fonction de l'état de mobilité de l'appareil afin de réduire la consommation d'énergie.
Voici les états de mobilité possibles :
DEVICE_MOBILITY_STATE_UNKNOWN
: Mobilité inconnueDEVICE_MOBILITY_STATE_HIGH_MVMT
: À vélo ou dans un véhicule motoriséDEVICE_MOBILITY_STATE_LOW_MVMT
: Marche ou courseDEVICE_MOBILITY_STATE_STATIONARY
: Ne bouge pas
Si l'appareil est immobile, le framework Android augmente l'intervalle entre les analyses PNO de 60 à 180 secondes pour réduire la consommation d'énergie. Cette optimisation repose sur l'hypothèse selon laquelle l'appareil est peu susceptible de trouver de nouveaux réseaux lors des analyses PNO lorsqu'il ne se déplace pas.
Si l'appareil se trouve dans un autre état de mobilité ou si la méthode n'est pas appelée, l'appareil utilise le comportement de balayage PNO par défaut.
Implémentation
Pour implémenter cette fonctionnalité d'optimisation de l'énergie sur un appareil exécutant Android 10 ou version ultérieure, dérivez les informations de mobilité de l'appareil et appelez la méthode setDeviceMobilityState()
à partir d'une application système personnalisée.