Причина моей печали здесь в этом выпуске Документации
В то время как документация здесь заявляет
"Предварительный общий ключ для использования с 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 );