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

Posted

技术标签:

【中文标题】如果设备上已连接 WIFI SSID,则检查 wifi 凭据【英文标题】:Checking wifi credentials if WIFI SSID was already connected on a device 【发布时间】:2018-04-30 07:08:18 【问题描述】:

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

问题: 用户输入 wifi 密码后 - 我需要检查密码是否正确 - 只有连接到这个 wifi 网络才能检查 - 如何正确执行此操作?

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

任何帮助 - 欢迎!谢谢。

【问题讨论】:

【参考方案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凭据检查失败或连接网络失败。

我向 google 开发人员请求 wifi 管理器的功能来检查凭据能力,但现在对我来说这是所有可以做的。

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

【讨论】:

以上是关于如果设备上已连接 WIFI SSID,则检查 wifi 凭据的主要内容,如果未能解决你的问题,请参考以下文章

家里除了手机以外其他设备突然都连不上Wi-Fi了,一开始以为笔记本电脑?

(转)ubuntu下怎么放wifi热点给andriod设备

linux下怎样判断wifi已经连接成功

ESP8266断网后自动重新连接Wi-Fi网络

可达性 - 检查公共 Wi-Fi 连接是不是有效

刚安装的arch linux怎么连接有密码的wifi