Как и что установить в 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: ОШИБКА /wpa _supplicant (2032): Строка 0: Недействительный пароль PSK.
Я уверен, что это пароль и все остальные параметры правы.
Что я пропущу?
Ответы
Ответ 1
Причина моей печали здесь в этой проблеме с документацией
Пока документация здесь заявляет
"Предварительно общий ключ для использования с WPA-PSK. Когда значение этого ключа будет считано, фактический ключ не будет возвращен, просто" * ", если ключ имеет значение или нулевую строку в противном случае."
Это правильно, но очень важно то, что он не говорит, - это то, что ожидается здесь простой 64-байтовый хеш-результат linux
команда
wpa_passphrase <ssid> [passphrase]
или пароль точки доступа В ДВОЙНЫХ ЦИТАТАХ!
Поэтому, если точка доступа 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 );
Ответ 2
Спасибо, все, что я могу использовать для вашего кода conncet для wpa.
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 );
рано, я вводил пароль ошибки, но позже я исправляю пароль, тогда он работает.
Ответ 3
Вам нужно будет добавить строку ниже, чтобы:
wifi.saveConfiguration();