1 关于wifi的操作主要包括以下几个类和接口:
1.1 ScanResult:主要用来描述已经检测出的接入点,包括介入点的地址,介入点的名称,身份认证,频率,信号强度等信息
1.2 wifiConfiguration:wifi网络的配置,包括安全配置等
1.3 wifiInfo:wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,mac地址,网络ID,信号强度等信息。
1.4 wifiManager:提供了管理wifi连接的大部分API,它主要包括如下内容:
a)已经配置好的网络的清单。这个清单可以查看和修改,而且可以修改个别记录的属性
b)当连接中有活动的wi-fi网络时,可以建立或者关闭这个连接,并且可以查询有关网络的状态的动态信息。
c)对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。
d)还定义了许多常量来表示wi-fi状态的改变。
1.5 wifiManager.WifiLock:允许程序一直使用wifi无线网络,使其一直保持连接
2 代码例子:
2.1 TestWifi:
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 TestWiFi
{
// 定义WifiManager对象
privateWifiManager mWifiManager;
// 定义WifiInfo对象
privateWifiInfo mWifiInfo;
// 扫描出的网络连接列表
privateList<ScanResult>mWifiList;
// 网络连接列表
privateList<WifiConfiguration>mWifiConfigurations;
// wifiLock锁
WifiLock mWifiLock;
publicTestWiFi(Context context)
{
// 取得WifiManager对象
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 打开wifi
publicvoid openWifi()
{
if (!mWifiManager.isWifiEnabled())
{
mWifiManager.setWifiEnabled(true);
}
}
// 关闭wifi
publicvoid closeWifi()
{
if (mWifiManager.isWifiEnabled())
{
mWifiManager.setWifiEnabled(false);
}
}
// 锁定wifi
publicvoid acquireWifiLock()
{
mWifiLock.acquire();
}
// 解锁wif
publicvoid releaseWifiLock()
{
// 解锁前锁定
if (mWifiLock.isHeld())
{
mWifiLock.acquire();
}
}
// 创建一个wifiLock
publicvoid creatWifiLock()
{
mWifiLock = mWifiManager.createWifiLock("Test");
}
// 得到配置好的网络
publicList<WifiConfiguration> getConfiguration()
{
return mWifiConfigurations;
}
// 指定配置好的网络进行连接
publicvoid conectConfiguration(intindex)
{
// 索引大于配置好的网络索引
if (index >mWifiConfigurations.size())
{
return;
}
// 连接配置好的指定ID的网络
mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId,true);
}
// 开始扫描
publicvoid startScan()
{
mWifiManager.startScan();
// 得到扫描结果
mWifiList = mWifiManager.getScanResults();
// 得到配置好的网络连接
mWifiConfigurations = mWifiManager.getConfiguredNetworks();
}
// 得到网络列表
publicList<ScanResult> getwifiList()
{
return mWifiList;
}
// 查看扫描结果
publicStringBuilder lookUpScan()
{
StringBuilder stringBuilder =new StringBuilder();
for (inti = 0; i < mWifiList.size(); i++)
{
stringBuilder.append("Index "+ newInteger(i + 1).toString() + ":");
// 将ScanResult信息转换成一个字符串
// 其中包括BSSID,SSID,capabilities,frequency和level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("\n");
}
return stringBuilder;
}
// 得到Mac地址
publicString getMacAdrress()
{
return (mWifiInfo== null) ?"NULL" : mWifiInfo.toString();
}
// 得到接入点的BSSID
publicString getBSSID()
{
return (mWifiInfo== null) ?"NULL" : mWifiInfo.getBSSID();
}
// 得到IP地址
publicint getIPAddress()
{
return (mWifiInfo== null) ? 0 :mWifiInfo.getIpAddress();
}
// 得到连接的ID
publicint getNetWorkId()
{
return (mWifiInfo== null) ? 0 :mWifiInfo.getNetworkId();
}
// 得到wifiInfo的所有信息包
publicString getWifiInfo()
{
return (mWifiInfo== null) ?"NULL" : mWifiInfo.toString();
}
//添加一个网络并连接
publicvoid addNetwork(WifiConfiguration wcg)
{
int wcgID =mWifiManager.addNetwork(wcg);
mWifiManager.enableNetwork(wcgID, true);
}
publicvoid disconnectWifi(intnetId)
{
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
}
2.2 使用wifi网络连接,需要在AndroidManifest.xml中加入对应的权限:
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.MODIFY_PHONE_STATE"/>