这一篇分析Wifi连接AP后显示IP地址流程,AP连接成功后wpa_supplicant会上报连接状态到SupplicantStaIfaceHal。所以就从SupplicantStaIfaceHal开始。
1 SupplicantStaIfaceHal.java
收到状态改变后通过WiFiMonitor上报的事件
2 wifiMonitr.java
这里是发送消息NETWORK_CONNECTION_EVEN。WifiStateMachine接收处理消息。
3 WifiStateMachine.java
方法中更新了Wifi的状态信息NetworkInfo,然后发送广播WifiManager.NETWORK_STATE_CHANGED_ACTION。
我们这里主要看下最后的代码。切换到mObtainingIpState状态机。
这里执行更新系统的State,清掉bssid以避免其影响到漫游导致断链,停掉当前IpClient,启动新的IpClient获取IP。最后回调IpClient.Callback.onProvisioningSuccess接口。
发送消息CMD_IP_CONFIGURATION_SUCCESSFUL。L2ConnectedState处理消息CMD_IP_CONFIGURATION_SUCCESSFUL。
这里进入sendConnectedState();
这里执行了setNetworkDetailedState(DetailedState.CONNECTED);将NetworkInfo状态置为CONNECTED状态
最后调用sendNetworkStateChangeBroadcast(mLastBssid)发送广播通知页面更新显示IP信息。