網(wǎng)上關(guān)于Android WIFI模塊開(kāi)發(fā)的博文已經(jīng)很多,這里我也想給出我對(duì)WIFI模塊編程的一些消化結(jié)果,將Android的一些API封裝類(lèi),方便在各個(gè)Android APP中復(fù)用,簡(jiǎn)化程序的開(kāi)發(fā)。
成都創(chuàng)新互聯(lián)公司主要從事成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)欒城,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18982081108本文先給出一個(gè)掃描WIFI功能的封裝成類(lèi),創(chuàng)建該類(lèi)對(duì)象后,當(dāng)你簡(jiǎn)單地調(diào)用search()函數(shù)后,后臺(tái)會(huì)自動(dòng)掃描當(dāng)前的WIFI SSID,并以回調(diào)的形式通知你掃描結(jié)果,代碼如下,需要注意的地方都用注釋標(biāo)注出來(lái)了。
package com.example.testwifi; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; public class WifiSearcher { private static final int WIFI_SEARCH_TIMEOUT = 20; //掃描WIFI的超時(shí)時(shí)間 private Context mContext; private WifiManager mWifiManager; private WiFiScanReceiver mWifiReceiver; private Lock mLock; private Condition mCondition; private SearchWifiListener mSearchWifiListener; private boolean mIsWifiScanCompleted = false; public static enum ErrorType { SEARCH_WIFI_TIMEOUT, //掃描WIFI超時(shí)(一直搜不到結(jié)果) NO_WIFI_FOUND, //掃描WIFI結(jié)束,沒(méi)有找到任何WIFI信號(hào) } //掃描結(jié)果通過(guò)該接口返回給Caller public interface SearchWifiListener { public void onSearchWifiFailed(ErrorType errorType); public void onSearchWifiSuccess(List<String> results); } public WifiSearcher( Context context, SearchWifiListener listener ) { mContext = context; mSearchWifiListener = listener; mLock = new ReentrantLock(); mCondition = mLock.newCondition(); mWifiManager=(WifiManager)mContext.getSystemService(Context.WIFI_SERVICE); mWifiReceiver = new WiFiScanReceiver(); } public void search() { new Thread(new Runnable() { @Override public void run() { //如果WIFI沒(méi)有打開(kāi),則打開(kāi)WIFI if( !mWifiManager.isWifiEnabled() ) { mWifiManager.setWifiEnabled(true); } //注冊(cè)接收WIFI掃描結(jié)果的監(jiān)聽(tīng)類(lèi)對(duì)象 mContext.registerReceiver(mWifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); //開(kāi)始掃描 mWifiManager.startScan(); mLock.lock(); //阻塞等待掃描結(jié)果 try { mIsWifiScanCompleted = false; mCondition.await(WIFI_SEARCH_TIMEOUT, TimeUnit.SECONDS); if( !mIsWifiScanCompleted ) { mSearchWifiListener.onSearchWifiFailed(ErrorType.SEARCH_WIFI_TIMEOUT); } } catch (InterruptedException e) { e.printStackTrace(); } mLock.unlock(); //刪除注冊(cè)的監(jiān)聽(tīng)類(lèi)對(duì)象 mContext.unregisterReceiver(mWifiReceiver); } }).start(); } //系統(tǒng)WIFI掃描結(jié)果消息的接收者 protected class WiFiScanReceiver extends BroadcastReceiver { public void onReceive(Context c, Intent intent) { //提取掃描結(jié)果 List<String> ssidResults = new ArrayList<String>(); List<ScanResult> scanResults = mWifiManager.getScanResults(); for(ScanResult result : scanResults ) { ssidResults.add(result.SSID); } //檢測(cè)掃描結(jié)果 if( ssidResults.isEmpty() ) { mSearchWifiListener.onSearchWifiFailed(ErrorType.NO_WIFI_FOUND); } else { mSearchWifiListener.onSearchWifiSuccess(ssidResults); } mLock.lock(); mIsWifiScanCompleted = true; mCondition.signalAll(); mLock.unlock(); } } }
代碼中用到了Lock和Condition,就是為了阻塞地等待WIFI掃描的結(jié)果,以來(lái)可以在search函數(shù)內(nèi)部直接完成監(jiān)聽(tīng)對(duì)象的registerReceiver和unregisterReceiver,防止由于某些原因忘記unregisterReceiver導(dǎo)致程序crash,另一方面,針對(duì)某些Android系統(tǒng)可能不一定能夠及時(shí)收到WIFI掃描結(jié)果而設(shè)置一個(gè)超時(shí)時(shí)間,這樣,不至于UI一直長(zhǎng)時(shí)間地等待WIFI掃描結(jié)果而“假死”。
對(duì)了,AndroidManifest.xml文件中記得添加權(quán)限支持哦:
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
這個(gè)WIFI掃描類(lèi)就分享到這里啦,希望對(duì)初學(xué)者有幫助,java文件見(jiàn)博文后面的附件,有任何疑問(wèn)歡迎留言或者來(lái)信lujun.hust@gmail.com交流,或者關(guān)注我的新浪微博 @盧_俊 獲取最新的文章和資訊。
附件:http://down.51cto.com/data/2364295另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站名稱(chēng):Android開(kāi)發(fā)實(shí)踐:WIFI掃描功能的封裝-創(chuàng)新互聯(lián)
地址分享:http://aaarwkj.com/article2/codpoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站排名、用戶(hù)體驗(yàn)、服務(wù)器托管、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)