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
中引入了一个名为 setDeviceMobilityState()
的可选 API 方法,该方法可根据设备的移动状态增加 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()
方法。