Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
当有两个或者两个以上的已经保存的无线网络可以连接时,系统通过attemptAutoJoin()来选择一个最优网络。
假设只有两个保存的无线网络,配置文件如下:
root@rk3288:/ # cat /data/misc/wifi/wpa_supplicant.conf
network={
ssid="RD-TA100-2.4G"
psk="Gerrit2All"
key_mgmt=WPA-PSK
priority=2
}
network={
ssid="Kris"
psk="20122008"
key_mgmt=WPA-PSK
priority=3
}
来看attemptAutoJoin():
boolean attemptAutoJoin()
{
//获取上一次选择的网络配置,我上次选的是ap: "Kris"
String lastSelectedConfiguration = mWifiConfigStore.getLastSelectedConfiguration();
if (lastSelectedConfiguration != null) {
age = 14000;
}
//获取最近配置过的网络,这里会获取到两个,也就是配置文件中的那两个
List<WifiConfiguration> list =
mWifiConfigStore.getRecentConfiguredNetworks(age, false);
for (WifiConfiguration config : list) {
//candidate保存当前网络配置
if (candidate == null) {
candidate = config;
} else {
//循环第二次时就会比较两个网络配置
int order = compareWifiConfigurations(candidate, config);
if (order > 0) {
// Ascending : candidate < config
//经过一番计算后,发现order>0,那么老的candidate网络配置就会被新的代替,
//如果有多余两个保存的无线网络,那么依次计算并且符合条件后替换
candidate = config;
}
}
}
if (mWifiStateMachine.shouldSwitchNetwork(networkDelta)) { // !!! JNo: Here!
//发送自动连接event给WifiStateMachine
mWifiStateMachine.sendMessage(WifiStateMachine.CMD_AUTO_CONNECT,