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 引入了一个名为 setDeviceMobilityState()
的可选 API 方法(在 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()
方法。