0

我正在使用 WifiManager 测试特定 SSID 的存在并验证给定的 WPA 密码,但我得到了一个奇怪的结果。

代码如下所示:

WifiConfiguration wc = new WifiConfiguration();

// init ssid and password as Strings ...
wc.SSID = "\"" + ssid + "\"";
wc2.preSharedKey  = "\"" + password + "\"";

wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

int res = wifi.addNetwork(wc);
boolean b = wifi.enableNetwork(res, true);

奇怪的是 enableNetwork() 会返回 true,即使带有 SSID 的 wifi 网络不在线(?!)。但是请注意,如果存在目标 Wifi 网络并且密码正确,则代码会成功建立连接。

Android 文档说 enableNetwork() “如果操作成功,则返回 true”。我的问题是:

1)如果网络甚至不存在,如何启用网络?

2) 我是否错误地初始化了 WifiConfiguration 参数 wc?

3) 这是建立/测试与 Wifi 网络连接的正确方法吗?

4

1 回答 1

3

1)如果网络甚至不存在,如何启用网络?

Android 文档说 enableNetwork() “如果操作成功,则返回 true”。

它们实际上意味着启用操作已成功启动,它没有崩溃......如果 wifi 实例不再链接到 wifi 请求者,这可能会返回 false。

2) 我是否错误地初始化了 WifiConfiguration 参数 wc?

我不确定,但看起来还不错。

3) 这是建立/测试与 Wifi 网络连接的正确方法吗?

startScan()在启用网络之前,您应该使用该方法检查网络是否实际可用。(您将在回调中获得 SSID 列表)。

您还应该使用 BroadcastReceiver 从 Intent 操作中获取结果NETWORK_STATE_CHANGED_ACTION,您可以在其中检查与接入点的连接是否成功。

于 2012-07-08T19:47:13.750 回答