您的位置:首页 > 理论基础 > 计算机网络

[RK3288][Android6.0] 主动从WLAN网络切换到移动数据网络

2017-07-25 15:19 627 查看
Platform: Rockchip

OS: Android 6.0

Kernel: 3.10.92

开发者选项有个栏位是“Aggressive WiFi to Cellular handover”,



这个选项的功能是“当WiFi信号较弱时,将主动从WiFi切换到移动数据网络”,根据之前对网络评分机制的了解,当WiFi分数较低的时候,那么就会被“踢出局”由移动数据网络接替工作,那么此选项是否也是通过影响评分值的方式呢?

“Aggressive WiFi to Cellular handover”对应的string name在

packages/apps/Settings/res/values/strings.xml:3643:

<string name="wifi_aggressive_handover">Aggressive Wi\u2011Fi to Cellular handover</string>


代码里查找wifi_aggressive_handover

DevelopmentSettings.java

private static final String WIFI_AGGRESSIVE_HANDOVER_KEY = "wifi_aggressive_handover";


mWifiAggressiveHandover = findAndInitSwitchPref(WIFI_AGGRESSIVE_HANDOVER_KEY);


当点击设置里的switch时,触发click函数

public boolean onPreferenceTreeClick()
{
} else if (preference == mWifiAggressiveHandover) {
writeWifiAggressiveHandoverOptions();
}
}


writeWifiAggressiveHandoverOptions()

private void writeWifiAggressiveHandoverOptions() {
mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
}


最终调用WiFiService

public void enableAggressiveHandover(int enabled) {
enforceAccessPermission();
mWifiStateMachine.enableAggressiveHandover(enabled);
}

void enableAggressiveHandover(int enabled) {
mAggressiveHandover = enabled;
}


mAggressiveHandover被调用的地方:

private void calculateWifiScore(WifiLinkLayerStats stats) {
//rssi受mAggressiveHandover的值影响
int rssi = mWifiInfo.getRssi() - 6 * mAggressiveHandover
+ (homeNetworkBoost ? WifiConfiguration.HOME_NETWORK_RSSI_BOOST : 0);
sb.append(String.format(" rssi=%d ag=%d", rssi, mAggressiveHandover));

boolean isBadRSSI = (is24GHz && rssi < mWifiConfigStore.thresholdBadRssi24.get())
|| (!is24GHz && rssi < mWifiConfigStore.thresholdBadRssi5.get());
boolean isLowRSSI = (is24GHz && rssi < mWifiConfigStore.thresholdLowRssi24.get())
|| (!is24GHz && mWifiInfo.getRssi() < mWifiConfigStore.thresholdLowRssi5.get());
boolean isHighRSSI = (is24GHz && rssi >= mWifiConfigStore.thresholdGoodRssi24.get())
|| (!is24GHz && mWifiInfo.getRssi() >= mWifiConfigStore.thresholdGoodRssi5.get());
}


可以看到当此选项开启之后,rssi的值会变小,进而影响到到score的值,印证了一开始的猜测

不过这种做法让人费解,相当于强制在代码中减少实际RSSI的值,然后让WiFi强制切换到移动网络,不太理解Google的做法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: