如果设备上已连接WIFI SSID,请检查wifi凭据

时间:2018-04-30 07:08:18

标签: android wifi

情况: 1)我已经成功连接到我的SSID的android设备,所以密码存储,并且连接良好。 2)在我的应用程序中,我可以选择用户为此网络输入wifi凭证(此处确定SSID没问题,但无法确定无root密码,因此用户手动输入)

问题: 用户输入wifi密码后 - 我需要检查密码是否正确 - 只有检查这个的方法是连接到这个wifi网络 - 如何正确地做到这一点?

尝试了什么: 当我从wifi ssid断开连接,并且我添加配置为wifi与凭证用户输入 - 即使它是错误的密码 - wifi重新连接成功,因为我猜之前从我的应用程序之外的配置输入的凭据是正确的。所以无论用户输入什么密码 - 无论如何都要连接,我不知道用户输入的凭证是否正确。

任何帮助 - 欢迎!感谢。

1 个答案:

答案 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管理员检查凭据能力,但是现在对我来说这就是可以做到的。

伙计们,欢迎任何其他解决方案!