Сканирование разгрузки предпочтительной сети Wi-Fi

Сканирование предпочтительной разгрузки сети Wi-Fi (PNO) — это сканирование Wi-Fi с низким энергопотреблением, которое происходит через регулярные промежутки времени, когда устройство отключено от Wi-Fi и экран выключен. Сканирование PNO используется для поиска сохраненных сетей и подключения к ним. Эти сканирования планируются платформой с помощью команды NL80211_CMD_START_SCHED_SCAN . Для получения дополнительной информации см. nl80211.h .

Оптимизация энергопотребления с помощью информации о мобильности устройства

На устройствах под управлением Android 9 или более ранней версии, когда устройство отключено от Wi-Fi и экран выключен, сканирование PNO происходит с интервалом в 20 секунд для первых трех сканирований, а затем замедляется до одного сканирования каждые 60 секунд для всех последующих сканирований. Сканирование PNO прекращается при обнаружении сохраненной сети или включении экрана.

В Android 10 представлен дополнительный метод API с именем setDeviceMobilityState() в WifiManager , который увеличивает интервал между сканированиями PNO в зависимости от состояния мобильности устройства для снижения энергопотребления.

Возможные состояния мобильности:

  • DEVICE_MOBILITY_STATE_UNKNOWN : Неизвестная мобильность.
  • DEVICE_MOBILITY_STATE_HIGH_MVMT : на велосипеде или в автомобиле.
  • DEVICE_MOBILITY_STATE_LOW_MVMT : Ходьба или бег.
  • DEVICE_MOBILITY_STATE_STATIONARY : Не двигается.

Если устройство неподвижно, платформа Android увеличивает интервал между сканированиями PNO с 60 до 180 секунд для снижения энергопотребления. Эта оптимизация сделана исходя из предположения, что устройство вряд ли обнаружит какие-либо новые сети при сканировании PNO, когда устройство не движется.

Если устройство находится в любом другом состоянии мобильности или если метод не вызывается, устройство использует поведение сканирования PNO по умолчанию.

Выполнение

Чтобы реализовать эту функцию оптимизации энергопотребления на устройстве под управлением Android 10 или более поздней версии, получите информацию о мобильности устройства и вызовите метод setDeviceMobilityState() из специального системного приложения.