2012-07-07 58 views
0

我使用WifiManager來測試特定SSID的存在並驗證給定的WPA密碼,但是我得到了一個奇怪的結果。Android WifiManager製作幻影連接?

的代碼看起來是這樣的:

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網絡存在並且密碼正確,則代碼會成功進行連接。

Android文檔說enableNetwork()「如果操作成功返回true」。我的問題是:

1)如果網絡沒有連接,網絡如何啓用?

2)我是否已經錯誤地初始化了WifiConfiguration參數wc?

3)這是測試與Wifi網絡連接的正確方法嗎?

回答

3

1)如果網絡不在那裏,網絡如何啓用?

Android文檔說enableNetwork()「如果操作成功返回true」。

它們實際上意味着啓動操作已成功啓動,它沒有崩潰......如果wifi實例沒有再連接到wifi請求方,這可能返回false。

2)我是否已經錯誤地初始化了WifiConfiguration參數wc?

我不確定,但它看起來沒問題。

3)這是測試與Wifi網絡連接的正確方法嗎?

在啓用網絡之前,您應該使用startScan()方法檢查網絡是否實際可用。 (您將在回調中獲得SSID列表)。

您還應該使用BroadcastReceiver從意向操作NETWORK_STATE_CHANGED_ACTION中獲得結果,您可以在其中檢查到接入點的連接是否成功。