資源描述:
《android4.0 wifi模塊詳細(xì)解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、android4.0wifi模塊詳細(xì)解析這幾天閑著沒(méi)事,我就隨便拿起Android源碼看看。以下要講的是在ICS中wifi初始化的一些流程。涉及的文件有:SystemServer.javaWifiSettings.javaWifiEnabler.javaWifiManager.javaWifiService.javaWifiStateMachine.javaandroid_net_wifi_wifi.cppwifi.c首先從SystemServer.java開(kāi)始,它做了3個(gè)動(dòng)作:1.添加注冊(cè)Conne
2、ctivityService連接服務(wù),它跟所有手機(jī)的無(wú)線通信都有聯(lián)系,包括wifi,藍(lán)牙,2g網(wǎng)絡(luò),3g網(wǎng)絡(luò)等connectivity=newConnectivityService(context,networkManagement,networkStats,networkPolicy);ServiceManager.addService(Context.CONNECTIVITY_SERVICE,connectivity);2.管理開(kāi)機(jī)wifi開(kāi)啟與否的問(wèn)題wifi.checkAndStartWifi
3、();publicvoidcheckAndStartWifi(){mAirplaneModeOn.set(isAirplaneModeOn());mPersistWifiState.set(getPersistedWifiState());booleanwifiEnabled=shouldWifiBeEnabled()
4、
5、testAndClearWifiSavedState();setWifiEnabled(wifiEnabled);mWifiWatchdogStateMachine=WifiWatc
6、hdogStateMachine.makeWifiWatchdogStateMachine(mContext);}3.添加注冊(cè)wifi的核心服務(wù)wifiservicewifi=newWifiService(context);ServiceManager.addService(Context.WIFI_SERVICE,wifi);好了,機(jī)器啟動(dòng)的時(shí)候動(dòng)作就這些。要開(kāi)啟wifi,還需要人在設(shè)置界面進(jìn)行開(kāi)啟?!は旅鎸⒁徊讲浇榻Bwifi是怎樣開(kāi)啟起來(lái)的進(jìn)入wifi設(shè)置界面,相關(guān)文件WifiSettings.j
7、ava開(kāi)啟Wifi的組件是一個(gè)CompoundButton,跟它關(guān)聯(lián)起來(lái)的是一個(gè)WifiEnabler.java類,它是在WifiSettings里面初始化的publicvoidonActivityCreated(BundlesavedInstanceState){mWifiEnabler=newWifiEnabler(activity,actionBarSwitch);}當(dāng)用戶點(diǎn)擊wifi的開(kāi)啟按鈕時(shí)候,會(huì)觸發(fā)WifiEnabler里面的onCheckedChanged函數(shù)publicvoidonC
8、heckedChanged(CompoundButtonbuttonView,booleanisChecked){if(mWifiManager.setWifiEnabled(isChecked)){mSwitch.setEnabled(false);}else{Toast.makeText(mContext,R.string.wifi_error,Toast.LENGTH_SHORT).show();}在onCheckedChanged函數(shù)里面,調(diào)用了WifiManager的setWifiEnabl
9、ed方法publicbooleansetWifiEnabled(booleanenabled){try{returnmService.setWifiEnabled(enabled);}catch(RemoteExceptione){returnfalse;}}它返回的是mService.setWifiEnabled(enabled),這里的mService是WifiService的代理,所以它實(shí)際調(diào)用的是wifiService里面的setWifiEnabled函數(shù)publicclassWifiServ
10、iceextendsIWifiManager.Stub,我們可以看到WifiService繼承一個(gè)接口IWifiManager.Stub,凡是繼承了像這種形式寫(xiě)法的接口服務(wù),都可以進(jìn)行遠(yuǎn)程調(diào)用,這就是Android內(nèi)部的aidl通信。接下來(lái)進(jìn)入wifiservicepublicsynchronizedbooleansetWifiEnabled(booleanenable){mWifiStateMachine.setWifiEnabled(enable);