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

相关推荐
a31582380611 小时前
Android Framework开发知识点整理
android·java·linux·服务器·framework·android源码开发
k***825111 小时前
图文详述:MySQL的下载、安装、配置、使用
android·mysql·adb
小七有话说12 小时前
DevUI与企业级中后台系统融合:低代码表单构建器实战
android·rxjava·devui
暗碳13 小时前
安卓abx二进制xml文件转换普通xml文件
android·xml
4z3313 小时前
Android15 Framework(3):系统服务进程 SystemServer 解析
android·源码阅读
没有了遇见14 小时前
Android 之Google Play bundletool 校验 AAB包
android·google
yuanhello14 小时前
【Android】Android的键值对存储方案对比
android·java·android studio
Ditglu.14 小时前
CentOS7 MySQL5.7 主从复制最终版搭建流程(避坑完整版)
android·adb
恋猫de小郭14 小时前
Android Studio Otter 2 Feature 发布,最值得更新的 Android Studio
android·前端·flutter
走在路上的菜鸟15 小时前
Android学Dart学习笔记第十二节 函数
android·笔记·学习·flutter