網(wǎng)上關(guān)于Android WIFI模塊開發(fā)的博文已經(jīng)很多,這里我也想給出我對WIFI模塊編程的一些消化結(jié)果,將Android的一些API封裝類,方便在各個Android APP中復(fù)用,簡化程序的開發(fā)。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),蘇仙企業(yè)網(wǎng)站建設(shè),蘇仙品牌網(wǎng)站建設(shè),網(wǎng)站定制,蘇仙網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,蘇仙網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
本文先給出一個掃描WIFI功能的封裝成類,創(chuàng)建該類對象后,當(dāng)你簡單地調(diào)用search()函數(shù)后,后臺會自動掃描當(dāng)前的WIFI SSID,并以回調(diào)的形式通知你掃描結(jié)果,代碼如下,需要注意的地方都用注釋標(biāo)注出來了。
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的超時時間
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超時(一直搜不到結(jié)果)
NO_WIFI_FOUND, //掃描WIFI結(jié)束,沒有找到任何WIFI信號
}
//掃描結(jié)果通過該接口返回給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沒有打開,則打開WIFI
if( !mWifiManager.isWifiEnabled() ) {
mWifiManager.setWifiEnabled(true);
}
//注冊接收WIFI掃描結(jié)果的監(jiān)聽類對象
mContext.registerReceiver(mWifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
//開始掃描
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();
//刪除注冊的監(jiān)聽類對象
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);
}
//檢測掃描結(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é)果,以來可以在search函數(shù)內(nèi)部直接完成監(jiān)聽對象的registerReceiver和unregisterReceiver,防止由于某些原因忘記unregisterReceiver導(dǎo)致程序crash,另一方面,針對某些Android系統(tǒng)可能不一定能夠及時收到WIFI掃描結(jié)果而設(shè)置一個超時時間,這樣,不至于UI一直長時間地等待WIFI掃描結(jié)果而“假死”。
對了,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>
這個WIFI掃描類就分享到這里啦,希望對初學(xué)者有幫助,java文件見博文后面的附件,有任何疑問歡迎留言或者來信lujun.hust@gmail.com交流,或者關(guān)注我的新浪微博 @盧_俊 獲取最新的文章和資訊。
名稱欄目:Android開發(fā)實踐:WIFI掃描功能的封裝
瀏覽路徑:http://chinadenli.net/article38/iidssp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、品牌網(wǎng)站制作、用戶體驗、、微信小程序、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)