WiFi的基本介绍及实现

10.5  WiFi的基本介绍及实现(2)

(4)WifiManager 管理WiFi 连接,由于内容比较多,简单地描述一部分方法。我们在例子里面再讲解。

addNetwork(WifiConfiguration config) 通过获取到的网络的链接状态信息来添加网络。

calculateSignalLevel(int rssi , int numLevels) 计算信号的等级。

compareSignalLevel(int rssiA, int rssiB) 对比连接A 和连接B。

createWifiLock(int lockType, String tag) 创建一个WiFi 锁,锁定当前的WiFi 连接。

disableNetwork(int netId) 让一个网络连接失效。

disconnect() 断开连接。

enableNetwork(int netId, Boolean disableOthers) 连接一个连接。

getConfiguredNetworks() 获取网络连接的状态。

getConnectionInfo() 获取当前连接的信息。

getDhcpInfo() 获取DHCP 的信息。

getScanResulats() 获取扫描测试的结果。

getWifiState() 获取一个WiFi 接入点是否有效。

isWifiEnabled() 判断一个WiFi 连接是否有效。

pingSupplicant() ping 一个连接,判断是否能连通。

ressociate() 即便连接没有准备好,也要连通。

reconnect() 如果连接准备好了,连通。

removeNetwork() 移除某一个网络。

saveConfiguration() 保留一个配置信息。

setWifiEnabled() 让一个连接有效。

startScan() 开始扫描。

updateNetwork(WifiConfiguration config) 更新一个网络连接的信息。

此外WifiManaer 还提供了两个内部的子类,MulticastLock和WifiManagerLock,分别简单介绍这两个内部类,MulticastLock允许一个应用程序接收多个无线网络的数据包;WifiManagerLock Wifi是网络锁的概念,一般情况当应用程序通过WiFi连接网络后,长时间不用,则网络自动关闭。如果利用WifiManagerLock锁定连接好的网络,那么就不会产生这种现象了,有锁定当然也有解除锁定。在使用过程中,WiFi的使用是一个耗电的过程,所以,应用程序又不能长时间进行网络连接。按照应用程序需求,一些耗时的操作就可以添加一个锁,简单请求就不用。

关于WiFi操作的例子,就不在Android平台开发了,此处给出一个自定义WiFi工具类,包含了WiFi的很多操作,如打开、关闭、锁定、解锁、扫描热点、WiFi配置、获取WiFi信息等。代码如下所示,代码来源EX_10_04:

实例:

 
 
  1. package com.pms.wifi;  
  2.  
  3. import java.util.List;  
  4.  
  5. import android.content.Context;  
  6. import android.net.wifi.ScanResult;  
  7. import android.net.wifi.WifiConfiguration;  
  8. import android.net.wifi.WifiInfo;  
  9. import android.net.wifi.WifiManager;  
  10. import android.net.wifi.WifiManager.WifiLock;  
  11.  
  12. public class WifiHandle {  
  13.     private WifiManager wifiManager = null;  
  14.     private WifiInfo wifiInfo = null;  
  15.     private List<ScanResult> scanResultList = null;// 扫描出的网络连接列表  
  16.     private List<WifiConfiguration> wifiConfigurationList = null;// 网络连接列表  
  17.     private WifiLock wifiLock = null;  
  18.  
  19.     // 构造函数  
  20.     public WifiHandle(Context context) {  
  21.         wifiManager = (WifiManager) context  
  22.         .getSystemService(context.WIFI_SERVICE);// 从系统服务中得到WifiManager  
  23.         // 得到WiFi相关信息,包括MAX地址、接入点BSSID、IP地址、连接的ID  
  24.         wifiInfo = wifiManager.getConnectionInfo();  
  25.     }  
  26.  
  27.     // 打开WiFi  
  28.     public void openWifi() {  
  29.         if (!wifiManager.isWifiEnabled()) {  
  30.             wifiManager.setWifiEnabled(true);  
  31.         }  
  32.     }  
  33.  
  34.     // 关闭WiFi  
  35.     public void closeWife() {  
  36.         if (wifiManager.isWifiEnabled()) {  
  37.             wifiManager.setWifiEnabled(false);  
  38.         }  
  39.     }  
  40.  
  41.     // 锁定WiFi  
  42.     public void lockWifi() {  
  43.         wifiLock.acquire();  
  44.     }  
  45.  
  46.     // 解锁WiFi  
  47.     public void rlockWifi() {  
  48.         if (wifiLock.isHeld()) {  
  49.             wifiLock.acquire();  
  50.         }  
  51.     }  
  52.  
  53.     // 创建一个wifilock  
  54.     public void createWifiLock() {  
  55.         wifiLock = wifiManager.createWifiLock("Machao");  
  56.     }  
  57.  
  58.     public List<WifiConfiguration> getConfingurationList() {  
  59.         return wifiConfigurationList;// 得到配置好的网络  
  60.     }  
  61.  
  62.     public void connectConfiguration(int index) {  
  63.         if (index > wifiConfigurationList.size()) {  
  64.             return;  
  65.         }  
  66.         wifiManager.enableNetwork(wifiConfigurationList.get(index).networkId,  
  67.                 true);// 连接配置好的指定ID的网络  
  68.     }  
  69.  
  70.     public void startScan() {  
  71.         wifiManager.startScan();  
  72.         // 得到扫描结果  
  73.         scanResultList = wifiManager.getScanResults();  
  74.         // 得到配置好的网络连接  
  75.         wifiConfigurationList = wifiManager.getConfiguredNetworks();  
  76.     }  
  77.  
  78.     // 得到网络列表  
  79.     public List<ScanResult> getScanResultList() {  
  80.         return scanResultList;  
  81.     }  
  82.  
  83.     // 查看扫描结果  
  84.     public StringBuilder lookUpScan() {  
  85.         StringBuilder stringBuilder = new StringBuilder();  
  86.         for (int i = 0; i < scanResultList.size(); i++) {  
  87.             stringBuilder  
  88.                     .append("Index_" + new Integer(i + 1).toString() + ":");  
  89.             // 将ScanResult信息转换成一个字符串包  
  90.             // 其中包括:BSSID、SSID、capabilities、frequency、level  
  91.             stringBuilder.append((scanResultList.get(i)).toString());  
  92.             stringBuilder.append("\n");  
  93.         }  
  94.         return stringBuilder;  
  95.     }  
  96.  
  97.     // 得到MAC地址  
  98.     public String getMacAddress() {  
  99.         return (wifiInfo == null) ? "NULL" : wifiInfo.getMacAddress();  
  100.     }  
  101.  
  102.     // 得到接入点的BSSID  
  103.     public String getBSSID() {  
  104.         return (wifiInfo == null) ? "NULL" : wifiInfo.getBSSID();  
  105.     }  
  106.  
  107.     // 得到IP地址  
  108.     public int getIPAddress() {  
  109.         return (wifiInfo == null) ? 0 : wifiInfo.getIpAddress();  
  110.     }  
  111.  
  112.     // 得到连接的ID  
  113.     public int getNetworkId() {  
  114.         return (wifiInfo == null) ? 0 : wifiInfo.getNetworkId();  
  115.     }  
  116.  
  117.     // 得到WifiInfo的所有信息包  
  118.     public String getWifiInfo() {  
  119.         return (wifiInfo == null) ? "NULL" : wifiInfo.toString();  
  120.     }  
  121.  
  122.     // 添加一个网络并连接  
  123.     public void addNetwork(WifiConfiguration wcg) {  
  124.         int wcgID = wifiManager.addNetwork(wcg);  
  125.         wifiManager.enableNetwork(wcgID, true);  
  126.     }  
  127.  
  128.     // 断开指定ID的网络  
  129.     public void disconnectWifi(int netId) {  
  130.         wifiManager.disableNetwork(netId);  
  131.         wifiManager.disconnect();  
  132.     }  
  133. }  

代码没有什么难度,好理解,就是正常调用Android提供的WiFi API,了解就可以了。另外WiFi操作需要在真机上测试才可以,模拟器上没有环境。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值