如果设备上已连接 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 凭据的主要内容,如果未能解决你的问题,请参考以下文章