在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            Android WIFI 詳解

            作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

            最 近研究Wifi模塊,查了不少的相關(guān)資料,但發(fā)現(xiàn)基本上是基于android2.0版本的的分析,而現(xiàn)在研發(fā)的android移動(dòng)平臺(tái)基本上都是2.3的 版本,跟2.0版本的差別,在Wifi模塊上也是顯而易見(jiàn)的。2.3版本W(wǎng)ifi模塊沒(méi)有了WifiLayer,之前的WifiLayer主要負(fù)責(zé)一些復(fù) 雜的Wifi功能,如AP選擇等以提供給用戶自定義,而新的版本里面的這塊內(nèi)容基本上被WifiSettings所代替。

            本文引用地址:http://www.biyoush.com/article/201610/305545.htm

            本文就是基于android2.3版本的Wifi分析,主要分為兩部分來(lái)分別說(shuō)明:

            (1) Wifi模塊相關(guān)文件的解析

            (2) Wpa_supplicant解析

            (3) Wifi的啟動(dòng)流程(有代碼供參考分析)

            一,Wifi模塊相關(guān)文件解析

            1) wifisettings.java

            packages/apps/Settings/src/com/android/settings/wifiwifisettings.java

            該類數(shù)據(jù)部分主要定義了下面幾個(gè)類的變量:

            {

            private final IntentFilter mFilter;

            //廣播接收器,用來(lái)接收消息并做響應(yīng)的處理工作

            privatefinal BroadcastReceiver mReceiver;

            //這是一個(gè)掃描類,會(huì)在用戶手動(dòng)掃描 AP時(shí)被調(diào)用

            privatefinal Scanner mScanner;

            private WifiInfo mLastInfo;

            //服務(wù)代理端,作為WifiService對(duì)外的接口類呈現(xiàn)

            privateWifiManager mWifiManager;

            //這個(gè)類主要實(shí)現(xiàn)Wifi的開(kāi)閉工作

            privateWifiEnabler mWifiEnabler;

            //AP

            private AccessPoint mSelected;

            private WifiDialog mDialog;

            ……

            }

            wifiSettings類的構(gòu)造函數(shù)的主要工作:定義了一個(gè)IntentFilter(Intent過(guò)濾器)變量,并添加了六個(gè)動(dòng)作,(了解 Android的intent機(jī)制的同學(xué)都知道什么意思,不明白的同學(xué)參考Intent機(jī)制的資料)接著定義一個(gè)廣播接收器,并有相應(yīng)的消息處理函數(shù),下 面是該構(gòu)造函數(shù)的定義:

            public WifiSettings() {

            mFilter = new IntentFilter();

            //intent機(jī)制中的intent消息過(guò)濾器,下面添加可以處理的動(dòng)作

            mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

            mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

            mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);

            mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);

            mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

            mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);

            //注冊(cè)了廣播接收器,用來(lái)處理接收到的消息事件

            mReceiver = new BroadcastReceiver() {

            @Override

            public void onReceive(Context context,Intent intent) {

            handleEvent(intent); //事件處理函數(shù)

            }

            };

            mScanner= new Scanner(); //手動(dòng)掃描類

            }

            在廣播接收器中的相應(yīng)函數(shù)onReceive函數(shù)中有個(gè)handleEvent函數(shù),它就是用來(lái)處理廣播接收器接受到的intent消息的,它的功能是根 據(jù)intent消息中的動(dòng)作類型,來(lái)執(zhí)行相應(yīng)的操作,每一種動(dòng)作對(duì)應(yīng)了activity的一項(xiàng)消息處理能力。

            在oncreate函數(shù)中實(shí)例化了mWifiManager和mWifiEnabler兩個(gè)類,這兩個(gè)類對(duì)wifiSettings來(lái)說(shuō)至關(guān)重要,它后面的定義的一系列函數(shù)都是通過(guò)調(diào)用這兩個(gè)類的相應(yīng)接口來(lái)實(shí)現(xiàn)的。

            ……

            mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

            mWifiEnabler = new WifiEnabler(this,

            (CheckBoxPreference) findPreference(enable_wifi));

            ……

            WifiSettings中還定義了顯示菜單和響應(yīng)菜單鍵的函數(shù),即onCreateOptionsMenu()和 onOptionsItemSelected();還有響應(yīng)配置對(duì)話框中按鍵的onClick()函數(shù);最后定義了Scanner類,它是一個(gè) handler的繼承類,實(shí)現(xiàn)了消息處理函數(shù),用于處理手動(dòng)掃描的動(dòng)作。

            2) WifiEnabler.java:

            packages/apps/Settings/src/com/android/settings/wifi/WifiEnabler.java

            private final Context mContext;

            private final CheckBoxPreference mCheckBox;

            //兩個(gè)重要成員

            private final WifiManager mWifiManager;

            private final IntentFilter mIntentFilter;

            wifienabler類中定義了四個(gè)成員變量很重要,mContext,mCheckBox,mWifiManager和mReceiver,其中 mContext用于獲取mwifiManager實(shí)例,mReceiver用來(lái)接收底層發(fā)來(lái)的消息,mCheckBox用來(lái)改變UI的狀態(tài)。

            該 類中定義了幾個(gè)重要的函數(shù)onPreferenceChange,handleWifiStateChanged和 handleStateChanged,onPreferenceChange用來(lái)處理按下的Enbler鍵,它會(huì)調(diào)用 mWifiManager.setWifiEnabled(enable),另外兩個(gè)用來(lái)處理接受的消息事件。

            在類的構(gòu)造函數(shù)中,主要做了一下工作:初始化了mContext,mCheckBox,mWifimanager,并且初始化了一個(gè) mIntentFilter變量,添加了三個(gè)動(dòng)作,在構(gòu)造函數(shù)的上面定義了一個(gè)廣播接收器,用來(lái)接收下層傳來(lái)的消息,并根據(jù)intent動(dòng)作的類型調(diào)用相 應(yīng)的處理函數(shù),這個(gè)廣播接收器在onResum函數(shù)中被注冊(cè)。

            public WifiEnabler(Context context, CheckBoxPreferencecheckBox) {

            mContext= context;

            mCheckBox = checkBox;

            mOriginalSummary = checkBox.getSummary();

            checkBox.setPersistent(false);

            mWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);

            mIntentFilter= new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);

            // Theorder matters! We really should not depend on this. :(

            mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);

            mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

            }

            這 里可以總結(jié)為:如果上層需要監(jiān)聽(tīng)或收到下層的消息,那么就要通過(guò)定義一個(gè)BroadcastReciever,并將它注冊(cè),當(dāng)然在接受到消息后應(yīng)該有處理 消息的函數(shù),然后在onReciever函數(shù)中根據(jù)消息調(diào)用相應(yīng)的處理函數(shù),這里的消息通知機(jī)制是Intent,在BroadcastReciever類 的onReciever函數(shù)的參數(shù)中可以看出。


            上一頁(yè) 1 2 3 4 5 6 7 8 下一頁(yè)

            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉