Conectarse a WiFi abierto

Utilizo el código de abajo para conectarse a redes cifradas. Sin embargo, si una red no está segura y dejo la clave vacía (""), entonces falla. ¿Alguien tiene una idea de cómo resolver esto? Además, ¿es posible detectar si una red está abierta utilizando el ssid / bssid? ¿O tengo que escanear con un filtro?

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(); } 

Utilizar

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

Sólo y funcionará.

Eliminar todas las demás asignaciones a wc , no es necesario utilizarlos para una simple tarea de conexión a una red. No está creating una red, se está conectando a una existing .

Para una solución completa, vea este enlace: ¿Cómo me conecto a una red Wi-Fi específica en Android mediante programación? Tiene todo lo que necesita saber.

  • Android 4.2.2 Wifi-Direct adhoc network - acceder a métodos ocultos android para establecer el SSID y contraseña?
  • Android: Cómo obtener el dispositivo actual WiFi-nombre directo
  • Como encontrar la dirección de la señal wifi de otro dispositivo en android?
  • ¿Cómo iniciar una conexión de red local programmically a través de hotspot Wi-Fi en Android?
  • ¿Cómo puedo ver si Wi-Fi está conectado en Android?
  • Android - detección si wifi es WEP, WPA, WPA2, etc. programáticamente
  • Chat wifi entre dos o más dispositivos Android
  • Compruebe si la red ScanResult ya está configurada (existe en la lista getConfiguredNetworks ())
  • Conecte Android a la red WiFi Enterprise EAP (PEAP)
  • Cómo evitar el retraso en los mensajes de GCM de Android / cambio de latidos del corazón
  • ¿Puedo encontrar la dirección MAC de mi punto de acceso en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.