一、 Android O wifi扫描场景
Android O上的wifi扫面场景可以归结为以下四种:
1、 亮屏情况下,在Wifi settings界面,固定扫描,时间间隔为10s。
2、 亮屏情况下,非Wifi settings界面,二进制指数退避扫描,退避算法:interval*(2^n), 最小间隔min=20s, 最大间隔max=160s.
3、 灭屏情况下,有保存网络时,若已连接,不扫描,否则,PNO扫描,即只扫描已保存的网络。最小间隔min=20s,最大间隔max=60s. (详见Android wifi PNO扫描流程(Android O))
4、 无保存网络情况下,固定扫描,间隔为5分钟,用于通知用户周围存在可用开放网络。
另外,当打开wifi时、进入wifi settings时、亮屏时、灭屏时、链接状态变化时,都会触发扫描。
其中场景1的逻辑在中WifiTracker中控制,2~3的逻辑主要在WifiConnectivityManager中控制,场景4的逻辑在WifiStateMachine中控制。
下面,我们看一下代码逻辑如何实现扫描机制的各种场景(wifi已打开)。
二、 Android O wifi扫描代码实现
1、 亮屏情况下,在Wifi settings界面,固定扫描,时间间隔为10s。
1>. packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java
public void onStart()
mWifiTracker.startTracking(); //startTracking for scan in a certain interval
public void onStop()
mWifiTracker.stopTracking(); //stop certain_interval_scan
2>. frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
public void startTracking()
resumeScanning();
public void resumeScanning()
if (mScanner == null) {
mScanner&nb