2010-01-26 92 views
17

在Android 1.5的(也1.6)如何以及如何設置到Android WifiConfiguration.preSharedKey連接到WPA2 PSK WiFi網絡

如何添加從代碼接入點?

給定支持WPA2的接入點。 這是我的代碼片段。 44:13.550:如在logcat中出現

01-26 16

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
// This is must be quoted according to the documentation 
// http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID 
wc.SSID = "\"SSIDName\""; 
wc.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); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean b = wifi.enableNetwork(res, true);   
Log.d("WifiPreference", "enableNetwork returned " + b); 

此代碼失敗ERROR /的wpa_supplicant(2032):行0:無效PSK '密碼'。

我確定這是密碼,所有其他參數都是正確的。 我錯過了什麼?

回答

43

的原因我的悲哀就在這裏in this Documentation issue

雖然documentation here狀態

「預共享密鑰,使用WPA-PSK使用。 當讀取該鍵的值,實際密鑰不會被返回,只有 「*」,如果該密鑰有一個值,否則爲空字符串。「

這是正確的,但很重要的是什麼不說的是,這裏有望在Linux 命令

wpa_passphrase <ssid> [passphrase] 

或接入點的密碼雙引號中的醚64字節的散列結果!

這樣的情況下,該接入點的PSK是「榜樣」它在Java 傳遞這樣

WifiConfiguration myWiFiConfig = new WifiConfiguration(); 
... 
myWiFiConfig.preSharedKey = "\"example\""; 
... 

OR

myWiFiConfig.preSharedKey = "0a0b0f62170ecc5bcf721b6ff170b8b560101b5d56b00a26abec217e0bb4aa1f"; 

對於所有的休息你會發現這種方式是正確的:

複製&粘貼它是和保存自我的痛苦的一天半,我們已經度過了它(特別感謝Reflog

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiConfiguration wc = new WifiConfiguration(); 
wc.SSID = "\"SSIDName\""; 
wc.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); 
Log.d("WifiPreference", "add Network returned " + res); 
boolean b = wifi.enableNetwork(res, true);   
Log.d("WifiPreference", "enableNetwork returned " + b); 
+1

嗨,我使用相同的代碼來創建wifi配置並連接到新創建的wifi接入點。但是當我一旦連接到無線網絡,然後重新啓動設備後,我的wifi配置確實被android記住,你知道任何我們可以告訴Android的方式,他需要通過運行記住這個wifi配置。 – User7723337 2012-03-18 07:29:03

+0

我嘗試了相同的代碼,但沒有被連接。當我看到WiFi設置時,我發現對於那個特定的訪問點,狀態顯示爲「用WPA/WPA2 PSK保護記錄」。當我嘗試手動補充然後它不要求密碼,但不要連接。請幫忙 – png 2012-03-25 08:11:18

+1

@A_user添加到最後:'wifi.saveConfiguration();' – 2013-08-23 22:16:33

2

你將不得不爲了增加波紋管行:

wifi.saveConfiguration(); 
3

謝謝,所有我可以用你的代碼conncet我的wpa psk wifi。

WifiConfiguration wc = new WifiConfiguration(); 
    // This is must be quoted according to the documentation 
    // http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html#SSID 
    wc.SSID = "\"zpoint\""; 
    wc.preSharedKey = "\"[email protected]!\""; 
    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); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean b = wifi.enableNetwork(res, true);   
    Log.d("WifiPreference", "enableNetwork returned " + b); 

早,我輸入錯誤密碼,但後來我正確的密碼,然後它的工作。

相關問題