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"/> |
android wifi
最新推荐文章于 2022-10-11 14:18:55 发布