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();
}
Haben Sie Code, um die Verschlüsselungsmethode von * nur * der SSID zu bekommen? – bluewhile
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 –