因為需要一直在弄網(wǎng)絡(luò)的問題,今天看了一下Wifi的操作,經(jīng)過整理,做出來了一個類,可能不全,但是個人感覺已經(jīng)完全能夠滿足需要了,當(dāng)然,里面的方法也有可能是錯誤的或者是不全的,這個類我沒有進行完整的測試,只測試了其中的一些方法。
其實操作Wifi也是很簡單的,主要使用以下幾個對象或變量:
private WifiManager wifiManager;// 聲明管理對象OpenWifi
private WifiInfo wifiInfo;// Wifi信息
private List<ScanResult> scanResultList; // 掃描出來的網(wǎng)絡(luò)連接列表
private List<WifiConfiguration> wifiConfigList;// 網(wǎng)絡(luò)配置列表
private WifiLock wifiLock;// Wifi鎖
其實這些不寫成一個單獨的類也是可以操作的,介理這里為了使用方便,寫了一個統(tǒng)一的類對Wifi進行操作,通過這些方法,基本上可以得到所有操作的數(shù)據(jù)
下面把代碼給大家,如果需要可以做為一個參考:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
package
com.wifitest;
import
java.util.List;
import
android.content.Context;
import
android.net.wifi.ScanResult;
import
android.net.wifi.WifiConfiguration;
import
android.net.wifi.WifiInfo;
import
android.net.wifi.WifiManager;
import
android.net.wifi.WifiManager.WifiLock;
public
class
WifiManageClass {
private
WifiManager wifiManager;
//
聲明管理對象
private
WifiInfo wifiInfo;
//
Wifi信息
private
List
<
ScanResult
>
scanResultList;
//
掃描出來的網(wǎng)絡(luò)連接列表
private
List
<
WifiConfiguration
>
wifiConfigList;
//
網(wǎng)絡(luò)配置列表
private
WifiLock wifiLock;
//
Wifi鎖
public
WifiManageClass(Context context) {
this
.wifiManager
=
(WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
//
獲取Wifi服務(wù)
//
得到Wifi信息
this
.wifiInfo
=
wifiManager.getConnectionInfo();
//
得到連接信息
}
public
boolean
getWifiStatus()
{
return
wifiManager.isWifiEnabled();
}
//
打開/關(guān)閉 wifi
public
boolean
openWifi() {
if
(
!
wifiManager.isWifiEnabled()) {
return
wifiManager.setWifiEnabled(
true
);
}
else
{
return
false
;
}
}
public
boolean
closeWifi() {
if
(
!
wifiManager.isWifiEnabled()) {
return
true
;
}
else
{
return
wifiManager.setWifiEnabled(
false
);
}
}
//
鎖定/解鎖wifi
//
其實鎖定WiFI就是判斷wifi是否建立成功,在這里使用的是held,握手的意思acquire 得到!
public
void
lockWifi() {
wifiLock.acquire();
}
public
void
unLockWifi() {
if
(
!
wifiLock.isHeld()) {
wifiLock.release();
//
釋放資源
}
}
//
我本來是寫在構(gòu)造函數(shù)中了,但是考慮到不是每次都會使用Wifi鎖,所以干脆自己建立一個方法!需要時調(diào)用,建立就OK
public
void
createWifiLock() {
wifiLock
=
wifiManager.createWifiLock(
"
flyfly
"
);
//
創(chuàng)建一個鎖的標(biāo)志
}
//
掃描網(wǎng)絡(luò)
public
void
startScan() {
wifiManager.startScan();
scanResultList
=
wifiManager.getScanResults();
//
掃描返回結(jié)果列表
wifiConfigList
=
wifiManager.getConfiguredNetworks();
//
掃描配置列表
}
public
List
<
ScanResult
>
getWifiList() {
return
scanResultList;
}
public
List
<
WifiConfiguration
>
getWifiConfigList() {
return
wifiConfigList;
}
//
獲取掃描列表
public
StringBuilder lookUpscan() {
StringBuilder scanBuilder
=
new
StringBuilder();
for
(
int
i
=
0
; i
<
scanResultList.size(); i
++
) {
scanBuilder.append(
"
編號:
"
+
(i
+
1
));
scanBuilder.append(scanResultList.get(i).toString());
//
所有信息
scanBuilder.append(
"
/n
"
);
}
return
scanBuilder;
}
//
獲取指定信號的強度
public
int
getLevel(
int
NetId)
{
return
scanResultList.get(NetId).level;
}
//
獲取本機Mac地址
public
String getMac() {
return
(wifiInfo
==
null
)
?
""
: wifiInfo.getMacAddress();
}
public
String getBSSID() {
return
(wifiInfo
==
null
)
?
null
: wifiInfo.getBSSID();
}
public
String getSSID() {
return
(wifiInfo
==
null
)
?
null
: wifiInfo.getSSID();
}
//
返回當(dāng)前連接的網(wǎng)絡(luò)的ID
public
int
getCurrentNetId() {
return
(wifiInfo
==
null
)
?
null
: wifiInfo.getNetworkId();
}
//
返回所有信息
public
String getwifiInfo() {
return
(wifiInfo
==
null
)
?
null
: wifiInfo.toString();
}
//
獲取IP地址
public
int
getIP() {
return
(wifiInfo
==
null
)
?
null
: wifiInfo.getIpAddress();
}
//
添加一個連接
public
boolean
addNetWordLink(WifiConfiguration config) {
int
NetId
=
wifiManager.addNetwork(config);
return
wifiManager.enableNetwork(NetId,
true
);
}
//
禁用一個鏈接
public
boolean
disableNetWordLick(
int
NetId) {
wifiManager.disableNetwork(NetId);
return
wifiManager.disconnect();
}
//
移除一個鏈接
public
boolean
removeNetworkLink(
int
NetId) {
return
wifiManager.removeNetwork(NetId);
}
//
不顯示SSID
public
void
hiddenSSID(
int
NetId)
{
wifiConfigList.get(NetId).hiddenSSID
=
true
;
}
//
顯示SSID
public
void
displaySSID(
int
NetId)
{
wifiConfigList.get(NetId).hiddenSSID
=
false
;
}
}
當(dāng)然在操作Wifi的時候也需要相應(yīng)的權(quán)限,個人感覺這個是使用權(quán)限最多的,當(dāng)然操作Wifi不能在模擬器中進行,必須要放到帶有Wifi的真機上進行,還有此類沒有對可能存在的錯誤進行相應(yīng)的捕獲與處理,希望參考的朋友注意這一點,否則可能容易被突然出來的錯誤誤導(dǎo),也找不到問題,我在開發(fā)的時候就遇到過這樣的問題!因此對可能存在的問題,一定要進行相應(yīng)的處理!
下面是操作這些所需要的權(quán)限,當(dāng)然根據(jù)操作的內(nèi)容不同,可能權(quán)限也不同,下面的權(quán)限僅供參考:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<
uses-permission
android:name
="android.permission.ACCESS_WIFI_STATE"
></
uses-permission
>
<
uses-permission
android:name
="adnroid.permission.ACCESS_CHECKIN_PROPERTTES"
></
uses-permission
>
<
uses-permission
android:name
="android.permission.WAKE_LOCK"
></
uses-permission
>
<
uses-permission
android:name
="android.permission.INTERNET"
></
uses-permission
>
<
uses-permission
android:name
="adnroid.permission.CHANGE_WIFI_STATE"
></
uses-permission
>
<
uses-permission
android:name
="android.permission.MODIFY_PHONE_STATE"
></
uses-permission
>
如果你發(fā)現(xiàn)這些代碼中有錯誤或者是不完整的話,希望發(fā)消息給我,進行完善!只有相互交流才能進步!
轉(zhuǎn)自: http://www.cnblogs.com/fly_binbin/archive/2010/12/21/1913230.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

