WIFI扫描流程分析

本文详细介绍了Android系统启动WiFi服务的过程,从SystemServer初始化ConnectivityService,到WifiService和WifiStateTracker的创建,再到WifiMonitor的启动和监控。在用户开启WiFi时,通过AIDL、Binder机制调用WifiService的setWifiEnabled,加载驱动,开启wpa_supplicant。当扫描AP时,Android通过JNI发送扫描命令,wpa_supplicant响应后,WifiMonitor处理事件并广播SCAN_RESULTS_AVAILABLE_ACTION,最后在WifiSettings中显示AP列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一.启动wifi服务

1.在 SystemServer 启动的时候,会生成一个 ConnectivityService 的实例

路径为:/frameworks/base/services/java/com/android/server/SystemServer.java

try {

             Slog.i(TAG, "Connectivity Service");

             connectivity = ConnectivityService.getInstance(context);

             ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);

            } catch (Throwable e) {

                Slog.e(TAG, "Failure starting Connectivity Service", e);

            }

2.ConnectivityService 类中private ConnectivityService(Context context) 构造函数创建

    WifiService和WifiStateTracker对象

/frameworks/base/services/java/com/android/server/ConnectivityService.java

for (int netType : mPriorityList) {

            switch (mNetAttributes[netType].mRadio) {

            case ConnectivityManager.TYPE_WIFI:

                if (DBG) Slog.v(TAG, "Starting Wifi Service.");

                WifiStateTracker wst = new WifiStateTracker(context, mHandler);

                WifiService wifiService = new WifiService(context, wst);

                ServiceManager.addService(Context.WIFI_SERVICE, wifiService);

       &

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值