




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、二:Wifi模塊的初始化:在SystemServer啟動的時候,會生成一個 Connectivityservice 的實例,try Log.i(TAG, "Starting Connectivity Service.");ServiceManager.addService(Context.CONNECTIVITY SERVICE, new ConnectivityService(context); catch (Throwable e) Log.e(TAG, "Failure starting Connectivity Service", e);Conn
2、ectivityService的構造函數會創建 WifiService ,if (DBG) Log.v(TAG, "Starting Wifi Service.");mWifiStateTracker = new WifiStateTracker(context, handler);WifiService wifiService = new WifiService(context, mWifiStateTracker);ServiceManager.addService(Context.WIFSERVICE, wifiService);WifiStateTracker會創建
3、 WifiMonitor接收來自底層的事件,WifiService 和 WifiMonitor 是整個模塊的核心。WifiService 負責啟動關閉 wpa_supplicant、啟動關閉 WifiMonitor監視線程和把命令下發給 wpa_supplicant ,而WifiMonitor 則負責從 wpa_supplicant 接收事件通知。具體流程圖如下:SistemS 門SwerThfdConnectj5t»SRci8ConcMtrwt 巾 read3 : Connectivityservice.getlnstanceQ10 : WifiSe-vice v.ifiServi
4、ce = new WifiService 0ServiceManager.addServiceQ一-Servicef*1anager.addService(Context.V7IFI_SERVICEf ,A,lfiServize);ServtceManacer.addServiceCContext.COECnviTCSERVICE, connectivity);VfiSemice d 3訴 StatuTracker用 Mong,6StateTracke創建的AiSMonitor接收來自底層的事件fiService和*f Monitor是整 個模塊的核心工'ifSeeice負責啟的關閉火
5、PLSupplicant、啟動關閉同fiMonitor監視線程 和把命令下發給wpa.supplisnt,而J'fiMonitor則負責從內pa_suppkant接收事件通知。第三部分:Wifi模塊的啟動(使能)WirelessSettings在初始化的時候配置了由 WifiEnabler 來處理Wifi按鈕,private void initToggles() mWifiEnabler = new WifiEnabler(this,(WifiManager) getSystemService(WIFI SERVICE),(CheckBoxPreference) findPrefere
6、nce(KEY_TOGGLE_WIFI);當用戶按下 Wifi 按鈕后,Android 會調用 WifiEnabler 的 onPreferenceChange ,再由 WifiEnabler 調用 WifiManager的setWifiEnabled 接口函數,通過 AIDL,實際調用的是 WifiService 的 setWifiEnabled 函數,WifiService接著向自身發送一條 MESSAGE_ENABLE_WF息,在處理該消息的代碼中做真正的使能工作:首先裝載WIFI內核模塊(該田塊的位再硬編碼為"/system/lib/modules/wlan.ko"
7、 ),然后啟動 wpa_supplicant (配置文件硬編碼為 "/data/misc/wifi/wpa_supplicant.conf" ),再通過 WifiStateTracker 來啟動 WifiMonitor中的監視線程。一private boolean setWifiEnabledBlocking(boolean enable) final int eventualWifiState = enable ? WIFI_STATE_ENABLED :WIFI_STATE_DISABLED;updateWifiState(enable ? WIFI STATE ENA
8、BLING : WIFI STATE DISABLING); if (enable) if (!WifiNative.loadDriver() Log.e(TAG, "Failed to 10ad Wi-Fi driver.");updateWifiState(WIFI STATE UNKNOWN);return false;_if (!WifiNative.startSupplicant() WifiNative.unloadDriver();Log.e(TAG, "Failed to start supplicant daemon.");update
9、WifiState(WIFI STATE UNKNOWN); return false; _ mWifiStateTracker.startEventLoop();工/ Success!persistWifiEnabled(enable);updateWifiState(eventualWifiState);return true;工當使能成功后,會廣播發送 WIFI_STATE_CHANGED_ACTJON Intent 通知外界 WIFI 已經成功使能了。WifiEnabler 創建的時候就會向Android注冊接收WIFI_STATE_CHANGED_ACTION比它會收到該Intent
10、 ,從而開始掃描。private void handleWifiStateChanged(int wifiState) if (wifiState = WIFI_STATE_ENABLED) loadConfiguredAccessPoints(); attemptScan();具體流程如下流程圖所示:setWifiEnabledBlockingQ2: WifiNative.loacDriverQ3 : j/,ifiJoadDriverO5 : WifiNative.startSupplicantO :-ri3ndrod ret wfi 'C'ifi.CDD4: /VifiJo
11、ad.driverO6 : android net wifi startSuS-'ifiStataTracker裝載*IF:內核模塊(該模塊的位置硬編碼為、7system/libjwodules/vdan.kor )啟動我pa_suppkant (配置文件硬編碼為匕Vdata/misc/wifi/wpa.supplicant.conf )7 : *A(ifi_start_supplKantO :,8 : mV/ifiStateTracker.startEventLoopO10WfMonitorMonKorThread啟動WifiMonitor中的監視» 線程。9 f star
12、tf /entLoopOn|;ifiMomtor .startfqrrtdring Q;Momto%read.s*tqsetWifiEnabledStateO詳見掃描流程圖當開啟成功后,金廣播發送"FI_STATE_CHANGED_ACTION這個IntEt通知外界*FI、 己經成功開啟了 門ifiEnab日創建的時侯就會向Android注冊接收WIFI.STATE.CHArjGED.ACTION 因此它會收到該Stent,從而開始掃描第四部分:查找熱點(AR上一節(第三部分:Wifi開啟)中講到Wifi模塊開啟后會對外發送WIFI_STATE_CHANGED_ACTIWifiLay
13、er 中注冊了 Action 的 Receiver 。當 WifiLayer收到此 Action后開始scan的流程,函數會接收到該事件,由此具體如下:當wpa_supplicant處理完SCAN令后,它會向控制通道發送事件通知掃描完成,從 wifi_wait_for_eventWifiMonitor 中的MonitorThread 會被執行來出來這個事件:第五部分:配置 AP參數當用戶在 WifiSettings界面上選擇了一個 AP后,會顯示配置 AP參數的一個對話框:守中七%叮。廣ree口出0sbAccses=Qin CiB 'og。3 :雙值霹Po rd? Hog ci5 og
14、 = nt1/. AccessPo ntD a:ogT : _當用戶在WifiSettings界面上選擇了一個AP、 后,合顯示配置所參數的一個對話椎用戶在口氏0印口 ritD目四 中埴寫參數第六部分:Wifi連接 具體流程參見以下流程圖:i:-由L百 MET工SfiMan百口后郁出b;£7"andleConnectQ胃上名 .9餐先檢測這個麗是不是之前被配置、 過,這個是通過向,3a_SL0P Z3-t發送 LIST,". .Q如命令并且比較返回值來實現的WrfiCortfiguration config - ftdConfiguredNetv.yllcOadd
15、Configuratio'."當用尸在工二EE印口舊出月其中匕 選擇好加密方式和輸入鎏鑰 之后,再點擊連接按鈕, Anc-as就裳去連接這個;P如果 工廠8口&m沒有這個工。的配置信息,- 則會向 .supplicant 發送-DDJ;ET;ORK 命令某添加遨AP jmanaoerEnableNet'A'OfkQ7 : m'6'ifiManager,Jet/:ork 03 : mService. jer, orkJ«;9 : vl'ifiNative. enabteNitv也kCoEmfand £接下去就是
16、二;層的器見之前的潦程用,ADDJCT鐘8K命令合返同一個TD ,咖微髀町再用這個返回的2作為母敬向 以?.>? 5- DD:,:*nt饅送EH4ElJ',E*;2RK命甯 ! 從而讓,;附口口前匚打:去連接逮雨第七部分:IP地址的配置 流程如圖:力6Mon tor . Moni 15ThreadDhsHandlr'MfStaSTracker1,handl-02 | hand eNetA'OStateCnange031: rfrWifiSta:eTracker.notifyStateCh:case EWNT_NETWORK_STATE_CHANGED: )當九QLKJppkAE成功連接上AP之后, 它會向控制通道發送事件通知連接上2 了 j 從而.,f /'ait for eent 函數會 接收到該事件,由此由fMonar中的 MomtorThread會被執行來出來這個事件T/fStateTrackerSeenqsCbsedWifiStateTracker中注冊的對相關數據庫的嬤者if tchanged)則啟 動當DHCP拿到IP地址之后,金再發送EVB4TJNTERFACE_COMFIGURATION_SUCCEEDED5j c1figL'eIn:erceOTarget
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建事業單位考試實踐和理論結合的有效方法試題及答案
- 探尋2024年農藝師考試學習效率的保障方法 特點試題及答案
- 高校招聘輔導員歷年總結試題及答案
- 2024年高校輔導員專業技能考核試題及答案
- 提升花藝師專業能力的學習與實踐技巧試題及答案
- 物理素質測試題及答案
- 服務專業的考試題及答案
- 農藝師考試時間分配與安排試題及答案
- 突破考試難點福建事業單位考試試題及答案
- 輔導員招聘考試的內容與技巧分析
- 有理數的加法說課課件2024-2025學年人教版數學七年級上冊
- GB/T 18655-2025車輛、船和內燃機無線電騷擾特性用于保護車載接收機的限值和測量方法
- 2025年江蘇南通蘇北七市高三二模語文作文分析
- 吉林省吉林市2024-2025學年高三下學期3月三模試題 生物 含答案
- 遼寧省協作校2024-2025學年度下學期高三第一次模擬考試語文+答案
- 2025年03月中央社會工作部所屬事業單位公開招聘11人筆試歷年參考題庫考點剖析附解題思路及答案詳解
- 2025年中高端女裝市場趨勢與前景深度分析
- 2025北京清華附中高三(下)統練一數學(教師版)
- 重慶市南開中學高2025屆高三第七次質量檢測化學試題及答案
- 華能霞浦核電限公司2025年上半年應屆畢業生招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2025春人教版歷史七年級下冊《第一單元 隋唐時期 繁榮與開放的時代》大單元整體教學設計2022課標
評論
0/150
提交評論