2012-03-15 2 views
0

그래서 여기에 트롤링 된 모든 스레드와 Google이 나를 데려 갈 곳을 트롤합니다. 하지만 여전히 WPA PSK 네트워크에 연결하는 데 문제가 있습니다. 여기에 내 코드가 있는데 SSID와 PSK를 읽은 두 개의 edittext 필드와 SSID가 숨겨져 있는지 여부를 선택하는 확인란이 하나씩 있습니다.안드로이드는 wifimanager를 사용하여 WPA-PSK 보안 네트워크에 연결합니다.

EditText mSSID = (EditText) findViewById(R.id.wifiTVssidcurrent); 
    String networkSSID = mSSID.getText().toString(); 
    EditText mWPA = (EditText) findViewById(R.id.wifiTVwpacurrent); 
    String networkWPA = mWPA.getText().toString(); 

    // Update text to show that connection is pending 
    TextView wifiStatus = (TextView) findViewById(R.id.wifiTVconnectionstatus); 
    wifiStatus.setText("Connecting to " + networkSSID); 

    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\"".concat(networkSSID).concat("\""); 
    wc.preSharedKey = "\"".concat(networkWPA).concat("\""); 

    CheckBox mSSIDHidden = (CheckBox) findViewById(R.id.wifiCBhiddenssid); 
    wc.hiddenSSID = false; 
    if (mSSIDHidden.isChecked()) { 
     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); 
    boolean c = wifi.reconnect(); 
    Log.d("WifiPreference", "reconnect returned " + c); 

실행 후 전화에서 볼 수있는 것은 AP에서 설정이 만들어졌지만 연결되지 않았기 때문입니다. 그리고 내가 만든 AP를 설정에서 수동으로 사용하려고하면 나중에 연결할 수 없습니다. 하지만 설정 내에서 AP를 만들면 꼭 연결해야합니다.

SSID 및 WPA PSK를 넣으려면 "\" "concat (networkSSID) .concat ("\ ""); 및 "\" "+ networkSSID +"\ ""; 같은 결과.

모든 팁을 매우 환영합니다. 감사합니다. Lasse

+0

그래서 나는 모든 스택 오버플로 여기에 제안하려고했다고 생각했다 . 하지만이 스레드는 실제로 결국 나를 도왔습니다 0120-13-팁을 제공 한 RYAN에게 큰 감사를 전합니다. 하나의 AP를 읽고 그것에 섞어 라. 내 경우 은 내가 나는 여전히 allowedGroupCiphers WEP40를 추가 할 필요 WPA를위한 설정하고 있지만 과 WEP104 를 추가 할 필요가 있다고 밝혀졌다 그리고 나는 단지 wc.allowedProtocols.set (WifiConfiguration.Protocol.RSN을)했다 ; 그래서 나는 또한 을 추가했다. wc.allowedProtocols.set (WifiConfiguration.Protocol.WPA); – Lasse

답변

4

OS에서 생성 한 설정을 읽는 방법을 제안 해 주신 Ryan에게 큰 감사를드립니다.

그래서 스택 오버플로에서 제안 된 모든 것을 시도했다고 생각했습니다. 하지만이 스레드는 실제로 결국 나를 도왔습니다 Setup wifi programatically using WPA Security in android tablet 하나의 AP를 읽는 데 필요한 정보를 제공 한 RYAN에게 큰 감사를드립니다. 내 경우에는 내가 심지어 내가 WPA를위한 설정입니다하지만 난 아직도 allowedGroupCiphers WEP40 및 WEP104을 추가하는 데 필요한 추가 할 필요가 있다고 밝혀졌다 그리고 나는 단지

`wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); //So I also added 
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);`