情况: 1)我已经成功连接到我的SSID的android设备,所以密码存储,并且连接良好。 2)在我的应用程序中,我可以选择用户为此网络输入wifi凭证(此处确定SSID没问题,但无法确定无root密码,因此用户手动输入)
问题: 用户输入wifi密码后 - 我需要检查密码是否正确 - 只有检查这个的方法是连接到这个wifi网络 - 如何正确地做到这一点?
尝试了什么: 当我从wifi ssid断开连接,并且我添加配置为wifi与凭证用户输入 - 即使它是错误的密码 - wifi重新连接成功,因为我猜之前从我的应用程序之外的配置输入的凭据是正确的。所以无论用户输入什么密码 - 无论如何都要连接,我不知道用户输入的凭证是否正确。
任何帮助 - 欢迎!感谢。
答案 0 :(得分:1)
经过几个小时的研究后,最后的人才能确定下一个:
前提条件: 1)设备连接到wifi网络,标准设备选项和正确的密码; 2)M尝试检查用户输入的此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)激活配置但仅使用此命令:
wifiManager.enableNetwork(networkId, true);
结果是,如果配置中的wifi密码是正确的,你可以在大约2到4秒内连接到wifi,但如果配置中的wifi密码错误 - 你连接(如果这个网络在通过设置之前连接)大约8-12秒。
这是你在2-4秒内没有连接,你可以写wifi凭证检查失败或连接到网络失败。
我从谷歌开发者的功能请求到wifi管理员检查凭据能力,但是现在对我来说这就是可以做到的。
伙计们,欢迎任何其他解决方案!