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