android 6.0wifi 切换,[RK3288][Android6.0] WiFi之无线网络配置的忘记(移除)过程

本文基于Rockchip平台、Android 6.0系统和3.10.92内核,分析无线网络配置的移除过程。当选择界面的FORGET时,会触发一系列流程调用,涉及WifiManager、WifiStateMachine等,还会进行权限检查、清理操作、通知WPAS移除和更新配置文件等,最后断开连接并进入定期扫描。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Platform: Rockchip

OS: Android 6.0

Kernel: 3.10.92

之前有分析过 无线网络配置的保存过程,这里看一下它的移除过程是怎样的,当选择界面的FORGET时,会触发以下流程调用。

cfa515d315bf532b55310d5d42dd57b7.png

onForget ->

forget ->

mWifiManager.forget ->  WiFiSettings.java //参数为当前选择forget的config的netid

sAsyncChannel.sendMessage -> 异步通道发送给WifiStateMachine,cmd是FORGET_NETWORK

processMessage -> WifiStateMachine.java  //当前处于ConnectedState,调用父类的父类ConnectModeState

mWifiConfigStore.getWifiConfiguration //根据netid得到对应的config

mWifiConfigStore.canModifyNetwork //检查调用者是否有权限remove network

mWifiConfigStore.forgetNetwork ->

removeConfigAndSendBroadcastIfNeeded ->     //执行清理操作

mConfiguredNetworks.remove  //从ConfiguredNetworks中移除

mScanDetailCaches.remove

sendConfiguredNetworksChangedBroadcast //发广播wifi状态变化: WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION

mWifiNative.removeNetwork ->

doBooleanCommand //通知WPAS移除network,命令是"REMOVE_NETWORK " + netId,这和用wpa_cli客户端的方法是一样的

mWifiNative.saveConfig ->

doBooleanCommand     //通知WPAS更新配置文件wpa_supplicant.conf

handleEvent WifiMonitor.java -> WPAS移除完毕之后会发DISCONNECTED事件过来,由WifiMonitor负责接收

handleNetworkStateChange ->

notifyNetworkStateChange ->

mStateMachine.sendMessage ->  //NETWORK_DISCONNECTION_EVENT, 发给WifiStateMachine

processMessage -> //ConnectedState

dispatchEvent ->  接着WifiMonitor又收到WPAS发来的STATE_CHANGE事件

handleSupplicantStateChange ->

notifySupplicantStateChange -> //

mStateMachine.sendMessage -> //SUPPLICANT_STATE_CHANGE_EVENT

processMessage -> //当前处于ConnectedState,调用父类的父类ConnectModeState

handleNetworkDisconnect ->

stopRssiMonitoringOffload -> //通知HAL stop rssi

mWifiNative.stopRssiMonitoring ->

stopRssiMonitoringNative ->

android_net_wifi_stop_rssi_monitoring_native ->

hal_fn.wifi_stop_rssi_monitoring

clearCurrentConfigBSSID -> //清理bssid

clearConfigBSSID

stopDhcp -> //关dchp,之前有分析过startdhcp的

handlePostDhcpSetup

mDhcpStateMachine.sendMessage  //DhcpStateMachine.CMD_STOP_DHCP

processMessage ->  //DhcpBoundState

processMessage -> //DhcpHaveAddressState的父类DhcpState

transitionTo(mStoppedState) ->

exit -> //DhcpHaveAddressState

setIpAddress ->

mNMService.setInterfaceConfig //通知netd设置ip

mNwService.clearInterfaceAddresses

mNwService.disableIpv6

setNetworkDetailedState    //这部分和ConnectionService有关,打算后面再细讲

mNetworkAgent.sendNetworkInfo

sendNetworkStateChangeBroadcast //广播WifiManager.NETWORK_STATE_CHANGED_ACTION

transitionTo(mDisconnectedState) ->

exit -> //ConnectedState

setScanAlarm //关闭周期性scan

enter -> //DisconnectedState

startScan //断开连接后进入定期扫描

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值