Android WifiManager进行幻像连接?

时间:2012-07-07 20:39:50

标签: android android-wifi android-networking

我正在使用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);

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

     

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

它们实际上意味着启用操作已成功启动,它没有崩溃......如果wifi实例不再与wifi请求者相关联,则可能返回false。

  

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

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

  

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

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

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