android Wifi自动连接
16lz
2021-01-23
通过程序来实现wifi的自动连接。
这两天对android的wifi功能研究了一下。下面共享出自己封装的WifiConnect类。(这里参考了ZXing开源项目中wifi模块)
首先,要了解android关于wifi的API.
如果你喜欢看English API,这是android关于wifi的API地址:
http://developer.android.com/reference/android/net/wifi/package-summary.html(配置Wifi,还需要设定权限,android中关于wifi的API文档中说明了要添加什么权限)
如果你一看英语就头疼,这里有关于wifi的api的中文解释
http://note.sdo.com/u/1500295617/n/prb71~jGAHfpnM0l000bgN
切入正题,这里贴出一个封装了的类(WifiConnect),在实例化WifiConnect对象时,需要传入一个WifiManager对象。WifiConnect类向外部提供一个Connect方法,参数是无线的SSID,password,还有加密类型。
/* * WifiConnect.java * Author: cscmaker */package com.wifi.connect;import java.util.List;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiManager;import android.util.Log;public class WifiConnect { WifiManager wifiManager; //定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况 public enum WifiCipherType { WIFICIPHER_WEP,WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID }//构造函数public WifiConnect(WifiManager wifiManager){ this.wifiManager = wifiManager;}//打开wifi功能 private boolean OpenWifi() { boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); } return bRet; } //提供一个外部接口,传入要连接的无线网 public boolean Connect(String SSID, String Password, WifiCipherType Type) { if(!this.OpenWifi()) { return false; }//开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi//状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句 while(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING ) { try{ //为了避免程序一直while循环,让它睡个100毫秒在检测…… Thread.currentThread(); Thread.sleep(100); } catch(InterruptedException ie){ } } WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);// if(wifiConfig == null){ return false;} WifiConfiguration tempConfig = this.IsExsits(SSID); if(tempConfig != null) { wifiManager.removeNetwork(tempConfig.networkId); } int netID = wifiManager.addNetwork(wifiConfig); boolean bRet = wifiManager.enableNetwork(netID, false); return bRet; } //查看以前是否也配置过这个网络 private WifiConfiguration IsExsits(String SSID) { List existingConfigs = wifiManager.getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\""+SSID+"\"")) { return existingConfig; } } return null; } private WifiConfiguration CreateWifiInfo(String SSID, String Password, WifiCipherType Type) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; if(Type == WifiCipherType.WIFICIPHER_NOPASS) { config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if(Type == WifiCipherType.WIFICIPHER_WEP) { config.preSharedKey = "\""+Password+"\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if(Type == WifiCipherType.WIFICIPHER_WPA) { config.preSharedKey = "\""+Password+"\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.status = WifiConfiguration.Status.ENABLED; } else { return null; } return config; } }
更多相关文章
- Android设备功能之录音教程篇
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
- Android 6.0权限机制
- Android 6.0及运行时权限处理
- Camera Flash的获得权限
- [置顶] Android 各类功能效果源代码集合
- Android之十三刮刮卡中奖功能
- ANDROID常用权限记录
- Android搜索自动提示功能 AutocompleteTextView