Android中的WiFi开发简明教程

摘要 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>

你可能感兴趣的:(Android中的WiFi开发简明教程)