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