[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:
代码里查找wifi_aggressive_handover
DevelopmentSettings.java
当点击设置里的switch时,触发click函数
writeWifiAggressiveHandoverOptions()
最终调用WiFiService
mAggressiveHandover被调用的地方:
可以看到当此选项开启之后,rssi的值会变小,进而影响到到score的值,印证了一开始的猜测
不过这种做法让人费解,相当于强制在代码中减少实际RSSI的值,然后让WiFi强制切换到移动网络,不太理解Google的做法
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的做法
相关文章推荐
- [RK3288][Android6.0] Audio播放时的pcm数据dump思路
- [RK3288][Android6.0] 一律运行WLAN漫游扫描选项
- [RK3288][Android6.0] WiFi之无线网络配置的关闭过程
- [RK3288][Android6.0] 无线网络术语(SoftMAC,FullMAC,cfg80211,mac80211)
- [RK3288][Android6.0] WiFi之无线网络配置的保存过程
- [RK3288][Android6.0] WiFi之网络时间定期同步更新
- [RK3288][Android6.0] WiFi之无线网络配置的忘记(移除)过程
- [RK3288][Android6.0] USB OTG模式及切换
- [RK3288][Android6.0] Audio录音HAL层的数据读取流程分析
- [RK3288][Android6.0] WiFi之Autojoin对无线网络的选择机制
- [RK3288][Android6.0] 网络服务Netd初始化流程小结
- [RK3288][Android6.0] 调试笔记 --- PreviewCallback获取NV12格式数据
- [RK3288][Android6.0] 调试笔记 --- Audio录音PCM数据抓取
- [RK3288][Android6.0] 调试笔记 --- Audio驱动层判断录音数据是否异常
- [RK3288][Android6.0] USB OTG模式及切换【转】
- [RK3288][Android6.0] WiFi之同步网络时间过程
- [RK3288][Android6.0] Camera HAL ION 使用小结
- [RK3288][Android6.0] 有线耳机插拔事件监听小结
- 移动数据通信网络工作原理(SGSN&GGSN)
- android 判断当前网络是否可用(ping网络),包含wifi和移动数据网络