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