Android12 Wifi的连接过程梳理

1. app调用wifiManager的connect方法

WifiManager WifiService WifiServiceImpl ConnectHelper ClientModeManager ClientModeImpl WifiNative SupplicantStaIfaceHal SupplicantStaNetworkHal App层 connect connectInternal framework层 connect (Binder调用) connect connectToNetwork connectNetwork connectNetwork ClientModeImpl设计了状态机,后面会单独研究这块 connectToNetwork (调到native层) native层 connectToNetwork (与hal层交互) hal层 select() (选定要连接的wifi) WifiManager WifiService WifiServiceImpl ConnectHelper ClientModeManager ClientModeImpl WifiNative SupplicantStaIfaceHal SupplicantStaNetworkHal

2.APP侧监听连接结果

2.1 应用层监听代码

cpp 复制代码
    private void listenConnectState() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                Log.d(TAG, "*************** networkState:" + networkInfo.getState());
                assert networkInfo != null;

                if (networkInfo.isConnected()) {
                    Log.d(TAG, "sucess------------");
                } else if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) {
                    Log.d(TAG, "disconnected------------");
                }
            }
        };
        mContext.registerReceiver(receiver, intentFilter);
    }

2.2 重要接口概述:

  1. Client Mode(客户端模式):设备作为客户端连接到一个无线接入点(AP),进行互联网或局域网通信。然后clientMode的实现在ClientModeImpl
  • wifi回调事件都会进入ClientModeImpl::WifiNetworkAgentCallback
  1. Scan-Only Mode(仅扫描模式):设备在该模式下仅进行 Wi-Fi 网络扫描,并不进行实际的数据连接。这通常用于搜索附近的 Wi-Fi 网络或检查网络状态。scanOnly则实现在ScanOnlyModeImpl

2.3 ClientModeImpl类的状态切换

  • 简单的说: 就是app发起连接调用,按1描述的流程调用到ClientModeImpl, 然后再各个子状态之间跳转。比如下面的流程就是app发起wifi连接的流程,从DisconnectedState一步步变到L3ConnectedState。

APP ClientModeImpl DisconnectedState ConnectableState wifiNative L2ConnectingState L2ConnectedState WifiNetworkAgentCallback NetworkAgent ConnectivityManager L3ConnectedState APP侧调用wifiManager发起连接 收到CMD_CONNECT_NETWORK 调用connectToUserSelectNetwork 发送CMD_START_CONNECT 消息 处理 CMD_START_CONNECT 调用connectToNetwork connectToNetwork 切到L2Connecting 注册回调 new WifiNetworkAgentCallback new register() registerNetworkAgent() alt 注册ConnectivityManager- 的Binder 根据回调进入不同的接口,发出不同的handelr消息 切到L3ConnectedState transitionTo(mL3ConnectedState) sendNetworkChangeBroadcast(DetailedState.CONNECTED) 发送广播,通知到APP 收到广播 alt 收到CMD_IP_CONFIGURATION_SUCCESSFUL 收到WifiMonitor.NETWORK_CONNECTION_EVENT事件 APP ClientModeImpl DisconnectedState ConnectableState wifiNative L2ConnectingState L2ConnectedState WifiNetworkAgentCallback NetworkAgent ConnectivityManager L3ConnectedState

相关推荐
mmsx5 分钟前
Android 新闻资讯客户端实战:从零搭建一个完整的新闻 App
android·app·源码
三8442 小时前
PHP 绕过污点追踪构造 Webshell:反序列化引用复用与 Trait 可变函数 RCE
android
石头猫灯2 小时前
WordPress wp2shell漏洞断点逐过程到注入点
android·学习
Android打工仔3 小时前
Kotlin 协程源码解析(五):BaseContinuationImpl.resumeWith() —— Continuation 链是如何被展开的?
android·kotlin
存在morning3 小时前
【PySpark 学习笔记 三】DataFrame API 入门
android·java·数据库
YSoup4 小时前
2026 安卓面试助手APP(安卓八股、题库)
android·面试·职场和发展
xcyxiner4 小时前
flutter 运行到模拟器上
android·前端·flutter
Android-Flutter4 小时前
android Glide 源码流程分析
android·kotlin
Android-Flutter4 小时前
android Glide 使用详解
android·kotlin
恋猫de小郭5 小时前
Dart 3.13 的到底改了什么?为什么很重要?有什么坑?
android·前端·flutter