Сканирование разгрузки предпочтительной сети 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() из пользовательского системного приложения.