WiFi之Framework连接过程小结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值