一.启动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);
&

本文详细介绍了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列表。
最低0.47元/天 解锁文章
342

被折叠的 条评论
为什么被折叠?



