摘要 Android提供了android.net.wifi包供我们操作WiFi。首先介绍一下几个类: WifiManager :提供了管理WiFI连接的大部分API ScanResult :已经检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度) WifiConfiguration :WiFi连接的网络配置(包
Android提供了android.net.wifi包供我们操作WiFi。首先介绍一下几个类:
WifiManager:提供了管理WiFI连接的大部分API
ScanResult:已经检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度)
WifiConfiguration:WiFi连接的网络配置(包括安全配置等)
WifiInfo:WiFI无线连接的描述(包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等等)
WifiManager.WifiLock:允许应用程序一直使用WiFI无线网络,通常情况下当用户在一段时间内没有任何操作的时候,WiFi网络会自动关闭。我们使用WifiLock来锁定WiFi网络,使其一直保持连接,直到这个锁被释放。多个应用程序可能有多个锁,当多有的应用程序的锁都被释放的时候,WiFi才被关闭。
下面我们通过代码理解WiFI的使用:
通过以下代码获得WifiManager对象(Wifi是系统的一项服务)
1
|
WifiManager
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); |
打开WiFi
1
2
3
4
5
|
public
void openWifi() { if
(!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled( true );
}
} |
关闭WiFi
1
2
3
4
5
|
public
void closeWifi() { if
(!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled( false );
}
} |
创建一个WifiLock
1
2
3
|
public
void creatWifiLock() { mWifiLock
= mWifiManager.createWifiLock( "Test" );
} |
锁定WifiLock
1
2
3
|
public
void acquireWifiLock() { mWifiLock.acquire();
} |
释放WifiLock
1
2
3
4
5
|
public
void releaseWifiLock() { if
(mWifiLock.isHeld()) { mWifiLock.release();
}
} |
添加一个WiFi并连接
1
2
3
4
|
public
void addNetworkAndConn(WifiConfiguration wcg) { int
netId = mWifiManager.addNetwork(wcg); mWifiManager.enableNetwork(netId,
true );
} |
断开一个指定ID的WiFi
1
2
3
4
|
public
void disconnectWifi(int netId) { mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
} |
连接到一个已经配置好了的WiFi
1
2
3
4
5
6
7
8
|
public
void connectConfiguration(int index) { //
索引大于配置好的网络索引返回 if
(index > mWifiConfiguration.size()) { return ;
}
mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
true );
} |
扫描可接入的WiFi
1
2
3
4
5
6
7
|
public
void startScan() { mWifiManager.startScan();
//
得到扫描结果 List<ScanResult>
wifiList = mWifiManager.getScanResults(); //
得到配置好的网络连接 List<WifiConfiguration>
wifiConfigList = mWifiManager.getConfiguredNetworks(); } |
查看扫描结果
1
2
3
4
5
6
7
8
9
10
11
12
|
public
StringBuilder lookUpScan() { StringBuilder
stringBuilder = new
StringBuilder(); for
(int i = 0; i < mWifiList.size(); i++) { stringBuilder
.append( "Index_"
+ new
Integer(i + 1).toString() + ":" );
//
将ScanResult信息转换成一个字符串包 //
其中把包括:BSSID、SSID、capabilities、frequency、level stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append( "\n" );
}
return
stringBuilder; } |
得到WiFi的一些信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
WifiInfo
mifiInfo = mWifiManager.getConnectionInfo(); //
得到MAC地址 public
String GetMacAddress() { return
(mWifiInfo == null )
? "NULL"
: mWifiInfo.getMacAddress(); }
//
得到接入点的BSSID public
String GetBSSID() { return
(mWifiInfo == null )
? "NULL"
: mWifiInfo.getBSSID(); }
//
得到IP地址 public
int GetIPAddress() { return
(mWifiInfo == null )
? 0 : mWifiInfo.getIpAddress(); }
//
得到连接的ID public
int GetNetworkId() { return
(mWifiInfo == null )
? 0 : mWifiInfo.getNetworkId(); }
//
得到WifiInfo的所有信息包 public
String GetWifiInfo() { return
(mWifiInfo == null )
? "NULL"
: mWifiInfo.toString(); } |
最后,使用WiFi必须添加的权限
1
2
3
4
5
6
|
<uses-permission
android:name= "android.permission.ACCESS_WIFI_STATE" ></uses-permission>
<uses-permission
android:name= "android.permission.ACCESS_CHECKIN_PROPERTIES" ></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= "android.permission.CHANGE_WIFI_STATE" ></uses-permission>
<uses-permission
android:name= "android.permission.MODIFY_PHONE_STATE" ></uses-permission> |