情况: 1)我的android设备已经成功连接到我的SSID,所以密码已经存储,并且连接良好。2)在我的应用程序中,我可以选择让用户输入此网络的wifi凭据(此处确定SSID没有问题,但不能确定没有root的密码,因此用户手动输入)
问题:用户输入wifi密码后-我需要检查密码是否正确-唯一检查的方法是连接到此wifi网络-如何正确执行此操作?
尝试:当我从wifi ssid断开连接时,我为wifi添加了凭据用户输入的配置-即使它是错误的密码- wifi重新连接成功,因为我猜之前从我的应用程序外部的配置输入的凭据是正确的。所以不管用户输入什么密码,我都不知道用户输入的凭证是否正确。
任何帮助-欢迎!谢谢。
发布于 2018-04-30 21:56:53
最后,经过几个小时的研究,人们终于能够确定下一步:
前提条件: 1)设备使用标准设备选项和正确的密码连接到wifi网络;2)我正在尝试检查用户输入的此wifi网络的凭据。
结果:警告!(只有确切的动作流对我有效):
1)断开wifi:
wifiManager.disconnect();2)创建配置:
WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + wifiSsid + "\"";
if(authType == 0){
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else if(authType == 1) {
conf.preSharedKey = "\""+ wifiPassword+"\"";
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
} else {
conf.preSharedKey = "\""+ wifiPassword+"\"";
}
conf.status = WifiConfiguration.Status.ENABLED;3)禁用并移除所有配置(如果您的应用程序中未创建配置,则不会移除它们):
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for (WifiConfiguration i : list) {
wifiManager.disableNetwork(i.networkId);
wifiManager.removeNetwork(i.networkId);
}4)添加已创建的配置:
final int networkId = wifiManager.addNetwork(conf);5)仅使用以下命令激活config:
wifiManager.enableNetwork(networkId, true);结果是,如果配置中的wifi密码是正确的,你可以在大约2-4秒内连接到wifi,但是如果配置中的wifi密码是错误的-你可以连接(如果这个网络之前通过设置连接)更长的时间,大约8- 12秒。
这里是您在2-4秒内未连接,您可以写wifi凭证检查失败或连接到网络失败。
我要求从谷歌开发人员功能到wifi管理器来检查凭证能力,但目前对我来说,这是唯一能做的。
伙计们,欢迎任何其他解决方案!
https://stackoverflow.com/questions/50095524
复制相似问题