Код, отправленный с AnujAroshA , здесь действительно полезен.Но отсутствует еще один случай:
..
} else if (securityMode.equalsIgnoreCase("PSK")) {
// PSK code
..
В противном случае код PSK выполняется и для сетей WEP и OPEN.
И стиль кода, на мой взгляд, не является оптимальным.Нет необходимости создавать две строки networkSSID и networkPass.Вы можете просто использовать ssid или пароль.
Предложение: разделить создание конфигурации Wi-Fi и метод подключения.
(1) Метод создания конфигурации Wifi:
private WifiConfiguration createAPConfiguration(String networkSSID, String networkPasskey, String securityMode) {
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = "\"" + networkSSID + "\"";
if (securityMode.equalsIgnoreCase("OPEN")) {
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
} else if (securityMode.equalsIgnoreCase("WEP")) {
wifiConfiguration.wepKeys[0] = "\"" + networkPasskey + "\"";
wifiConfiguration.wepTxKeyIndex = 0;
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
} else if (securityMode.equalsIgnoreCase("PSK")) {
wifiConfiguration.preSharedKey = "\"" + networkPasskey + "\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
} else {
Log.i(TAG, "# Unsupported security mode: "+securityMode);
return null;
}
return wifiConfiguration;
}
(2) Метод для подключения AP:
public int connectToAP(String networkSSID, String networkPasskey) {
for (ScanResult result : scanResultList) {
if (result.SSID.equals(networkSSID)) {
String securityMode = getScanResultSecurity(result);
WifiConfiguration wifiConfiguration = createAPConfiguration(networkSSID, networkPasskey, securityMode);
int res = wifiManager.addNetwork(wifiConfiguration);
Log.d(TAG, "# addNetwork returned " + res);
boolean b = wifiManager.enableNetwork(res, true);
Log.d(TAG, "# enableNetwork returned " + b);
wifiManager.setWifiEnabled(true);
boolean changeHappen = wifiManager.saveConfiguration();
if (res != -1 && changeHappen) {
Log.d(TAG, "# Change happen");
connectedSsidName = networkSSID;
} else {
Log.d(TAG, "# Change NOT happen");
}
return res;
}
}
return -1;
}
(3) Метод сканирования 100%, как опубликовано AnujAroshA .
public String getScanResultSecurity(ScanResult scanResult) {
final String cap = scanResult.capabilities;
final String[] securityModes = { "WEP", "PSK", "EAP" };
for (int i = securityModes.length - 1; i >= 0; i--) {
if (cap.contains(securityModes[i])) {
return securityModes[i];
}
}
return "OPEN";
}