Wifi连接有密码的SSID是wifiManager.addNetwork返回为-1
来源:互联网 发布:mac桌面文件夹 编辑:程序博客网 时间:2024/06/15 18:23
这些天发现以前原本写好的Wifi工具在连接Wifi的时候出问题了,甚至会直接崩溃,这对于app开发者来说是一个致命的伤害,反正我现在已经遍体鳞伤了。
连接Wifi的流程:
1、如果是没有密码的Wifi,直接连接即可;
2、如果是有密码的Wifi,需要按Wifi密码加密的加密情况来连接;
废话不多说,先上代码:
在修改之前连接的代码:
<span style="font-size:14px;"> public WifiConfiguration CreateWifiInfo(ScanResult scan, String Password) {WifiConfiguration config = new WifiConfiguration();config.hiddenSSID = false;config.status = WifiConfiguration.Status.ENABLED;if (scan.capabilities.contains("WEP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);config.SSID = "\"" + scan.SSID + "\"";config.wepTxKeyIndex = 0;config.wepKeys[0] = Password;} else if (scan.capabilities.contains("PSK")) {config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = "\"" + Password + "\"";} else if (scan.capabilities.contains("EAP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = "\"" + Password + "\"";} else {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = null;config.wepKeys[0] = "\"" + "\"";config.wepTxKeyIndex = 0;}return config; }</span>在连接Wifi的时候,执行到这里,然后去addNetwork的时候,返回的netId为-1,之后,由于没有做netId做判断,程序就一直在这里执行,也不返回任何东西。添加判断之后,发现,有密码的Wifi还是连接不上。然后在网上找了资料关于addNetwork返回值为-1的解决方案,采纳建议之后,确实可以正常连接我Wifi。
<span style="font-size:14px;"> WifiConfiguration config = new WifiConfiguration();config.hiddenSSID = false;config.SSID=scan.SSID;config.status = WifiConfiguration.Status.ENABLED;/*if (scan.capabilities.contains("WEP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);config.SSID = "\"" + scan.SSID + "\"";config.wepTxKeyIndex = 0;config.wepKeys[0] = Password;} else */if (scan.capabilities.contains("WPA")) {config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);config.preSharedKey = "\"".concat(Password).concat("\"");//config.SSID = "\"" + scan.SSID + "\"";//config.preSharedKey = "\"" + Password + "\"";} else if (scan.capabilities.contains("WEP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); if (getHexKey(Password)) config.wepKeys[0] = Password; else config.wepKeys[0] = "\"".concat(Password).concat("\""); config.wepTxKeyIndex = 0;//config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);//config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);//config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);//config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);//config.SSID = "\"" + scan.SSID + "\"";//config.preSharedKey = "\"" + Password + "\"";} else {//config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);//config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = null;config.wepKeys[0] = "\"" + "\"";config.wepTxKeyIndex = 0;config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);config.allowedAuthAlgorithms.clear();config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);}return config;</span>
我仔细对比一下了两者代码间的区别,只不是资料里面的config信息比较全而已,其实也没什么区别。
后来我想了想,是不是Wifi SSID的问题,在项目里面处理SSID是需要将SSID前面和后面的“\”都要去掉,那么scanResult的SSID是不是本身就有“\”呢?
我测试了一下,发现也没有啊,会不会是显示的问题?于是,我直接把scanResult的SSID赋值给了config的SSID,这样确实可以正常的连接Wifi:
<span style="font-size:14px;">public WifiConfiguration CreateWifiInfo(ScanResult scan, String Password) {WifiConfiguration config = new WifiConfiguration();config.hiddenSSID = false;config.SSID=scan.SSID;config.status = WifiConfiguration.Status.ENABLED;if (scan.capabilities.contains("WEP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);//config.SSID = "\"" + scan.SSID + "\"";config.wepTxKeyIndex = 0;config.wepKeys[0] = Password;} else if (scan.capabilities.contains("PSK")) {//config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = "\"" + Password + "\"";} else if (scan.capabilities.contains("EAP")) {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);//config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = "\"" + Password + "\"";} else {config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);//config.SSID = "\"" + scan.SSID + "\"";config.preSharedKey = null;config.wepKeys[0] = "\"" + "\"";config.wepTxKeyIndex = 0;}return config;}</span>难道是SSID搞的鬼?初步判断并不是config不全的问题。
新手菜鸟,希望大家喜欢,如果对你有帮助别忘了,别忘了点赞哦。
2 0
- Wifi连接有密码的SSID是wifiManager.addNetwork返回为-1
- C#使用Managed Wifi API连接带密码的SSID .
- 2.20 android连接wifi,解决mWifiManager.addNetwork(info)=-1
- WifiManager详解-wifi连接状态的监听
- WifiManager的getScanResults()返回列表为0
- rtl8188eus usb wifi 连接ssid的移植
- 树莓派连接隐藏SSID的WIFI
- Android WIFI 联接不加密热点总是失败 addNetwork总是返回-1
- C# 通过SSID连接指定的WIFI 【Managed Wifi API】
- 通过SSID,密码,和连接类型来连接WiFi,并保存配置
- 关于wifi连接机制以及WifiManager的使用和监听wifi的方式
- WifiManager自动连接wifi接入点
- android自动连接wifi——WifiManager
- 使用WiFIManager自动连接指定Wifi
- 连接到指定wifi——WIFIManager
- 获取设备wifi的SSID
- wifi开发——自动连接指定SSID的wifi热点(不加密/加密)
- wifi开发——自动连接指定SSID的wifi热点(不加密/加密)
- windows下 android studio 的NDK开发环境配置(2)
- 软件测试实习0624-TestNG依赖测试
- 输出格式
- 学习Javascript 网址
- PrintStream
- Wifi连接有密码的SSID是wifiManager.addNetwork返回为-1
- IntelliJ Idea 常用快捷键列表
- SQL 注入
- Python3从零学习(五)
- 常用 Linux 命令
- 剑指offer题解 左旋转字符串
- 期末考试-怀表问题(算法基础 第10周)
- linux mtd层ecc详解
- 合并排序