android Wifi自动连接
16lz
2021-12-04
通过程序来实现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,还有加密类型。
[java] view plain copy <EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">- /*
- *WifiConnect.java
- *Author:cscmaker
- */
- packagecom.wifi.connect;
- importjava.util.List;
- importandroid.net.wifi.WifiConfiguration;
- importandroid.net.wifi.WifiManager;
- importandroid.util.Log;
- publicclassWifiConnect{
- WifiManagerwifiManager;
- //定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况
- publicenumWifiCipherType
- {
- WIFICIPHER_WEP,WIFICIPHER_WPA,WIFICIPHER_NOPASS,WIFICIPHER_INVALID
- }
- //构造函数
- publicWifiConnect(WifiManagerwifiManager)
- {
- this.wifiManager=wifiManager;
- }
- //打开wifi功能
- privatebooleanOpenWifi()
- {
- booleanbRet=true;
- if(!wifiManager.isWifiEnabled())
- {
- bRet=wifiManager.setWifiEnabled(true);
- }
- returnbRet;
- }
- //提供一个外部接口,传入要连接的无线网
- publicbooleanConnect(StringSSID,StringPassword,WifiCipherTypeType)
- {
- if(!this.OpenWifi())
- {
- returnfalse;
- }
- //开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
- //状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
- while(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING)
- {
- try{
- //为了避免程序一直while循环,让它睡个100毫秒在检测……
- Thread.currentThread();
- Thread.sleep(100);
- }
- catch(InterruptedExceptionie){
- }
- }
- WifiConfigurationwifiConfig=this.CreateWifiInfo(SSID,Password,Type);
- //
- if(wifiConfig==null)
- {
- returnfalse;
- }
- WifiConfigurationtempConfig=this.IsExsits(SSID);
- if(tempConfig!=null)
- {
- wifiManager.removeNetwork(tempConfig.networkId);
- }
- intnetID=wifiManager.addNetwork(wifiConfig);
- booleanbRet=wifiManager.enableNetwork(netID,false);
- returnbRet;
- }
- //查看以前是否也配置过这个网络
- privateWifiConfigurationIsExsits(StringSSID)
- {
- List<WifiConfiguration>existingConfigs=wifiManager.getConfiguredNetworks();
- for(WifiConfigurationexistingConfig:existingConfigs)
- {
- if(existingConfig.SSID.equals("\""+SSID+"\""))
- {
- returnexistingConfig;
- }
- }
- returnnull;
- }
- privateWifiConfigurationCreateWifiInfo(StringSSID,StringPassword,WifiCipherTypeType)
- {
- WifiConfigurationconfig=newWifiConfiguration();
- 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
- {
- returnnull;
- }
- returnconfig;
- }
- }
- 上一篇c++蚁群算法源码
- 下一篇word2003和word2007如何添加和删除脚注
更多相关文章
- Android(安卓)Studio 里搭建自动化测试框架Robotium
- Android(安卓)照相功能
- android 图片浏览功能 图片放大缩小 使用 photoview 双击或双指
- Android沉浸式标题栏迄今为止最完美的解决方案
- 使用android:autoSizeMinTextSize需要api大于26
- 利用android proguard混淆代码
- android 屏幕旋转 重新调用onCreate
- android 拼音字母搜索联系人以及实现多选功能
- JavaEye Android(安卓)client 收藏管理功能