Как и что установить в Android WifiConfiguration.preSharedKey, чтобы соединиться с сетью WPA2 PSK WiFi

В Android 1.5 (также на 1,6)

Как добавить Точку доступа из кодекса?

Оказанная Точка доступа это поддержка WPA2. Вот мой фрагмент кода.

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 );

Этот кодекс терпит неудачу, как это в LogCat появляется

01-26 16:44:13.550: ERROR/wpa_supplicant (2032): Линия 0: Недействительный 'пароль' PSK.

Я уверен, что это - пароль и что вся остальная часть параметров правильная. Что я делаю, я отсутствую?

19
задан Boris Daich 26 January 2010 в 14:52
поделиться

1 ответ

Причина моей печали здесь в этом выпуске документации

, в то время как в документации здесь говорится

"Предварительно разделенный ключ для использования с WPA-PSK". Когда значение этого ключа считывается, фактический ключ не возвращается, а только "*" если ключ имеет значение, или нулевая строка в противном случае."

Это правильно, но очень важно то, что в не сказано , что ожидаемый здесь 64-байтовый хэш- результат от linux команда

wpa_passphrase <ssid> [passphrase] 

или пароль точки доступа IN DOUBLE QUOTES!

Итак, в случае, если PSK точки доступа - это "пример" , он должен быть передан в java. как это

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

Или

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 );
45
ответ дан 30 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: