2012-10-08 15 views
13

Ich verwende den folgenden Code, um eine Verbindung zu verschlüsselten Netzwerken herzustellen. Wenn jedoch ein Netzwerk ungesichert ist und ich den Schlüssel leer lasse (""), schlägt es fehl. Hat jemand eine Idee wie man das löst? Ist es darüber hinaus möglich zu erkennen, ob ein Netzwerk mit dem SSID/BSSID geöffnet ist? Oder muss ich mit einem Filter scannen?Verbinden mit Open WiFi

public void connectToSSID(final String ssid, final String key) { 
    Log.i("wifimaster", "connection to "+ssid); 

    WifiConfiguration wc = new WifiConfiguration(); 
    wc.SSID = "\""+ssid+"\""; //IMPORTANT! This should be in Quotes!! 
    wc.priority = 40; 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 
    wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 

    wc.preSharedKey = "\""+key+"\""; 
    wc.wepKeys[0] = "\""+key+"\""; //This is the WEP Password 
    wc.wepTxKeyIndex = 0; 

    wc.preSharedKey = "\""+key+"\""; 

    int res = wifiManager.addNetwork(wc); 
    Log.d("WifiPreference", "add Network returned " + res); 
    boolean es = wifiManager.saveConfiguration(); 
    Log.d("WifiPreference", "saveConfiguration returned " + es); 
    boolean b = wifiManager.enableNetwork(res, true); 
    Log.d("WifiPreference", "enableNetwork returned " + b); 

    if(b) 
     Toast.makeText(c, c.getString(R.string.connected), Toast.LENGTH_SHORT).show(); 
    else 
     Toast.makeText(c, c.getString(R.string.unconnected), Toast.LENGTH_SHORT).show(); 
} 

Antwort

12

Verwenden

wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 

nur und es wird funktionieren.

entfernen Sie alle anderen Zuweisungen zu wc, es ist nicht notwendig, sie für eine einfache Aufgabe der Verbindung mit einem Netzwerk zu verwenden. Sie sind nicht creating ein Netzwerk, Sie verbinden sich mit einem existing eins.

Für vollständige Lösung überprüfen Sie diesen Link: How do I connect to a specific Wi-Fi network in Android programmatically? Es hat alles, was Sie wissen müssen.

+0

Haben Sie Code, um die Verschlüsselungsmethode von * nur * der SSID zu bekommen? – bluewhile

+2

Nein. Sie können die Verschlüsselungsmethode nicht nur über die SSID finden. Sie müssen nach Netzwerken suchen und dann ScanResult verwenden, um alle verfügbaren Netzwerke zu erhalten. Dann suchen Sie nach Ihrem Netzwerk mit dem angegebenen SSID und finden Sie seine Verschlüsselungsmethode. Hier ist ein Link: http://stackoverflow.com/a/12747455/1117338 und http://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities –

Verwandte Themen