Wi-Fi AP를 Scan해서 ScanResult를 받은 후 Wi-Fi AP에 접속하려고 합니다. 
암호가 없는 공개된 AP에는 정상적으로 연결이 붙습니다. 

그러나, 암호가 들어가는 WEP나 WPA에서는 
enableNetwork() method가 정상적으로 true를 리턴하지만 
AP에 연결이 되지 않습니다. 

해결 방법은 무엇일까요? 

그런데, 환경설정에 있는 Wi-Fi 연결로는 정상적으로 연결이 잘 됩니다. 

퍼미션은 충분히 아래와 같이 준 상태입니다. 

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />


아래의 코드는 WPA 계열의 연결 AP에 접속하려는 코드입니다.  
왜 접속이 안되는 것일까요? 


private void connectWPA(ScanResult scanResult, String password)
{
final WifiConfiguration config = new WifiConfiguration();
config.BSSID = scanResult.BSSID;
config.SSID = "\"" + scanResult.SSID + "\"";
config.status = WifiConfiguration.Status.DISABLED;
config.priority = 40;
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.LEAP); 
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.preSharedKey = "\"".concat(password).concat("\"");

        String SSID = null; 
        int networkId = -1;

        final WifiManager wifi = (WifiManager) main.getSystemService(Context.WIFI_SERVICE);
        List<WifiConfiguration> list = wifi.getConfiguredNetworks();
        
        for(WifiConfiguration wifiConfig : list)
        {
        Log.d("AP", "for loop SSID : "+wifiConfig.SSID); 
        if(wifiConfig.SSID.equals("\""+scanResult.SSID+"\""))
        {
        networkId = wifiConfig.networkId; 
        SSID = wifiConfig.SSID;          
        break;
       
        }
        
        if (SSID == null) 
        {
        networkId = wifi.addNetwork(config);
            wifi.saveConfiguration(); 
        } 
        else
        Log.d("AP","Found : "+SSID); 
        
        boolean ok = wifi.enableNetwork(networkId, true);
        if (ok)
        {
    Log.d("AP", "OK enableNetwork "+SSID); 
        }
}


LogCat의 내용은 아래와 같으며 code는 에러없이 정상동작하였습니다. 

11-20 14:41:44.786: D/AP(19948): for loop SSID : "book"
11-20 14:41:44.786: D/AP(19948): Found : "book"
11-20 14:41:44.786: D/AP(19948): OK enableNetwork "book"