android wifi

  Wifi介绍
WiFi=Wireless Fidelity,802.11b标准,传输速度最高达11Mbps;有效距离也很长,与各种802.11DSSS设备兼容。WiFi是一个无线网络通信 技术的品牌,由Wi-Fi联盟(Wi-Fi Alliance)拥有,目的是改善基于IEEE 802.11标准的无线网络产品之间的互通性。
Android提供了android.net.wifi包 供我们操作。
下面我们来实现一些常见的操作,主要包括以下几个类和接口:
1)ScanResult:主要用来描述已经检测出的接入点,包括接入点的地址、名称、身份认证、频率、信号强度等信息。
2)WiFiConfiguration:Wifi网络的配置,包括安全配置等
3)WifiInfo:Wifi无线连接的概述,包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等信息。
4)WifiManager:提供了管理Wifi连接的大部分API,他主要包括如下内容:
a)已经配置好的网络的清单。这个清单可以查看和修改,而且可以修改个别记录的属性。
b)当连接中有活动的Wifi网络时,可以建立或者关闭这个连接,并且可以查询有关网络状态的动态信息。
c)对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。
d)还定义了许多常量来表示Wifi状态的改变。

5)WifiManager.WifiLock: 允许应用程序一直使用Wifi网络,通常情况下,当用户在一段时间内没有任何操作时,WiFi网络就会自动关闭。可以通过WifiLock来锁定Wifi 网络,使其一直保持连接,直到这个锁定被释放。当有多个应用程序时可能会有多个WifiLock,在无线电设备中必须保证任何一个应用中都没有使用 WifiLock时,才可以关闭它,在使用一个Wifi锁之前,必须确定应用需要Wifi的接入,或者能够在移动网络下工作。如果一个应用程序需要下载很 大的文件,就需要保持Wifi锁,来确保应用程序有充足的时间下载完成。但是如果一个应用程序只是偶尔需要网络,就不应该保持Wifi锁,以防止对电池寿 命的影响。注意Wifi锁不能超越客户端的Wifi Enabled设置,也没有飞行模式,此时他们仍然认为Wifi在运行,但是设备处于空闲状态。


下面我们来学习如何使用这些类来控制应用程序中的Wifi的连接。
要管理Wifi连接,首先来看看WifiManager如何使用。获得WifiManager对象:

WifiManager wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);

使用这个对象来操作Wifi连接。其方法如下:

addNetWork  添加一个配置好的网络连接
calculateSignalLevel  计算信号的强度
compareSignalLevel 比较两个信号的强度
createWifiLock  创建一个Wifi锁
disableNetwork  取消一个配置好的网络,即 使其不可用。
disconnect  从接入点断开
enableNetwork  允许指定的网络连接
getConfiguredNetworks 得到客户端所有已经配置好的网络列表
getConnectInfo 得到正在使用的连接的动态信息
getDhcpInfo  得到最后一次成功的DHCP请求的DHCP地址
getScanResults 得到被扫描到的接入点
getWifiState 得到可用Wifi的状态
isWifiEnabled  得到Wifi是否可用
pingSupplicant 检查客户端对请求的反应
reassociate 从当前接入点重新连接
removeNetwork 从已经配置好的网络列表中删除指定ID的网络
saveConfiguration 保存当前配置好的网络列表
setWifiEnabled 设置Wifi是否可用
startScan 扫描存在的接入点
updateNetwork 更新已经配置好的网络

最后我们来实现一个管理Wifi的类,首先,我们的WifiAdmin需要打开(关闭)WiFi、锁定(释放)WifiLock、创建WifiLock、取得配置好的网络、扫描、连接、断开、获取网络连接的信息等基本操作。

代码清单8-20 
public class WifiAdmin
{
 private WifiManager mWiFiManager;
 private WifiInfo mWifiInfo;
 private List<ScanResult> mWifiList;
 private List<WifiConfiguration> mWifiConfiguration;
 
 WifiLock mWifiLock;

 public WifiAdmin(Context context)
 {
  mWifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
  mWifiInfo=mWifiManager.getConnectionInfo();
 }

 public void OpenWifi()
 {
  if (!mWifiManager.isWifiEnabled())
  {
   mWifiManager.setWifiEnabled(true);
  }
 }

 public void CloseWifi()
 {
   if (!mWifiManager.isWifiEnabled())
  {
   mWifiManager.setWifiEnabled(false);
  }
 }

 public void AcquireWifiLock()
 {
  mWifiLock.acquire();
 }

 public void ReleaseWifiLock()
 {
  if (mWifiLock.isHeld())
  {
   mWifiLock.acquire(); 
  }
 }

 public void CreateWifiLock()
 {
  mWifiLock=mWifiManager.createWifiLock("Test");
 }

 public list<WifiConfiguration> getConfiguration()
 {
   return mWifiConfiguration;
 }

 public void ConnectConfiguration(int index)
 {
   if (index> mWifiConfiguration.size())
   { return;
    }
   mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);
 }

 public void startScan()
 {
  mWifiManager.startScan();
  mWifiList=mWifiManager.getScanResults();
  mWifiConfiguration=mWifiManager.getConfigureNetworks();
 }

 public List<ScanResult> getWifiList()
 {
  return mWifiList;
 }

 public StringBuilder LookUpScan() 
 {
  StringBuilder sb=new StringBuilder();
  for (int i=0;i<mWifiList.size();i++)
  {
   sb.append("Index_"+new Integer(i+1).toString()+":");
   sb.append((mWifiList.get(i)).toString());
   sb.append("\n");
  }
  return sb;
 }

 public String getMacAddress()
 {
  return (mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
 }

 public String getBSSID()
 {
  return (mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
 }

 public int getIPAddress()
 {
  return (mWifiInfo==null)?0:mWifiInfo.getIpAddress();
 }

 public int getNetworkId()
 {
  return (mWifiInfo==null)?0:mWifiInfo.getNetworkId();
 }

 public String getWifiInfo()
 {
  return (mWifiInfo==null)?"NULL":mWifiInfo.toString();
 }

 public void AddNetwork(WifiConfiguration wcg)
 {
   int wcgID=mWifiManager.addNetwork(wcg);
  mWifiManager.enableNetwork(wcgID,true);
 }

 public void DisconnectWifi(int netId)
 {
  mWifiManager.disableNetwork(netId); 
  mWifiManager.disconnect();
 }
}

权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值