Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
onPreferenceTreeClick -> WifiSettings.java
preference.getAccessPoint //获取当前选择的ap
showDialog //弹出对话框设置密码
onSubmit -> //点击连接后会调用
submit ->
connect -> //参数是WifiConfiguration类, 表示WiFi配置过的信息
mWifiManager.connect ->
sAsyncChannel.sendMessage -> //cmd: CONNECT_NETWORK
handleMessage -> WifiServiceImpl.java //ClientHandler
mWifiStateMachine.sendMessage ->
processMessage -> WifiStateMachine.java //DisconnectedState
processMessage -> //ConnectModeState
mWifiConfigStore.saveNetwork ->
addOrUpdateNetworkNative -> //完成add_network以及set_network工作,和之前分析的wpa_cli的过程原理是一样的
mWifiNative.addNetwork
mWifiNative.setNetworkVariable
mWifiNative.enableNetwork
sendConfiguredNetworksChangedBroadcast //广播:WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION
mWifiConfigStore.selectNetwork -> //根据config选择对应的network
mWifiNative.selectNetwork
enableNetworkWithoutBroadcast -> //enable选择的network,disabel其他network
mWifiNative.enableNetwork //这个好像和saveNetwork里有重复
markAllNetworksDisabledExcept
mWifiNative.reconnect() //之前可能连接到其他AP,重新连接
sendConfiguredNetworksChangedBroadcast -> //WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION
//当WPAS成功加入网络后,会通知WifiMonitor
handleEvent -> //cmd:CONNECTED
handleNetworkStateChange ->
notifyNetworkStateChange ->
mStateMachine.sendMessage -> //NETWORK_CONNECTION_EVENT
processMessage -> //ConnectModeState
mWifiInfo.setBSSID
mWifiInfo.setNetworkId
sendNetworkStateChangeBroadcast //广播: WifiManager.NETWORK_STATE_CHANGED_ACTION
transitionTo(mObtainingIpState) ->
enter -> //先执行父状态L2ConnectedState
new WifiNetworkAgent
enter -> //ObtainingIpState
startDhcp -> //用的是动态ip,开启dhcp服务从ap获取到一个ip地址,然后dhcp状态机会发送CMD_POST_DHCP_ACTION
mDhcpStateMachine.sendMessage -> //cmd: DhcpStateMachine.CMD_START_DHCP
processMessage -> //StoppedState
mController.sendMessage //cmd: DhcpStateMachine.CMD_PRE_DHCP_ACTION
transitionTo(mWaitBeforeStartState);
processMessage -> //L2ConnectedState
handlePreDhcpSetup //WifiStateMachine发送DhcpStateMachine.CMD_PRE_DHCP_ACTION_COMPLETE
processMessage -> //WaitBeforeStartState
runDhcpStart
dhcpSucceeded ->
mController.obtainMessage().sendToTarget() //CMD_POST_DHCP_ACTION
processMessage -> //L2ConnectedState
handlePostDhcpSetup
handleIPv4Success -> //参数:DhcpStateMachine.DHCP_SUCCESS
updateLinkProperties -> //更新网络配置
sendMessage -> //CMD_IP_CONFIGURATION_SUCCESSFUL
processMessage -> //L2ConnectedState
handleSuccessfulIpConfiguration
transitionTo(mConnectedState);
————————————————
版权声明:本文为CSDN博主「KrisFei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kris_fei/article/details/74453460