Quiero diseñar una aplicación que muestre una lista de redes Wi-Fi disponibles y conectarse a la red que seleccione el usuario.
He implementado la parte que muestra los resultados del escaneo. Ahora quiero conectarme a una red particular seleccionada por el usuario de la lista de resultados de escaneo.
¿Cómo hago esto?
android
android-wifi
wifimanager
Vikram Gupta
fuente
fuente
Respuestas:
Necesita crear una
WifiConfiguration
instancia como esta:Luego, para la red WEP, debe hacer esto:
Para la red WPA, debe agregar una frase de contraseña como esta:
Para la red abierta, debe hacer esto:
Luego, debe agregarlo a la configuración del administrador de wifi de Android:
Y finalmente, es posible que deba habilitarlo, por lo que Android se conecta a él:
UPD: en el caso de WEP, si su contraseña está en hexadecimal, no necesita rodearla con comillas.
fuente
La respuesta anterior funciona , pero la solución en realidad puede ser más simple. No es necesario recorrer la lista de redes configuradas ya que obtiene la identificación de red cuando agrega la red a través del WifiManager.
Entonces, la solución completa y simplificada se vería así:
fuente
CHANGE_WIFI_STATE
se necesita el permiso.Consulte: https://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities
Hay tres tipos de redes WIFI.
Primero, cree una instancia de un objeto WifiConfiguration y complete el SSID de la red (tenga en cuenta que debe estar entre comillas dobles), configure el estado inicial en deshabilitado y especifique la prioridad de la red (los números alrededor de 40 parecen funcionar bien).
Ahora para la parte más complicada: necesitamos llenar varios miembros de WifiConfiguration para especificar el modo de seguridad de la red. Para redes abiertas.
Para redes que utilizan WEP; tenga en cuenta que la clave WEP también se incluye entre comillas dobles.
Para redes que usan WPA y WPA2, podemos establecer los mismos valores para cualquiera.
Finalmente, podemos agregar la red a la lista conocida de WifiManager
fuente
Crédito a @ raji-ramamoorthi y @kenota
La solución que funcionó para mí es la combinación de los contribuyentes anteriores en este hilo.
Llegar
ScanResult
aquí es el proceso.Aviso para
unregister
elloonPause
yonStop
vive estounregisterReceiver(broadcastReceiver);
fuente
Si su dispositivo conoce las configuraciones de Wifi (ya almacenadas), podemos evitar la ciencia de cohetes. Simplemente recorra las configuraciones y verifique si el SSID coincide. Si es así, conéctese y regrese .
Establecer permisos:
Conectar:
fuente
Me rompí la cabeza para entender por qué sus respuestas para WPA / WPA2 no funcionan ... después de horas de intentos encontré lo que se está perdiendo:
se REQUIERE para redes WPA !!!!
Ahora funciona :)
fuente
Esta es una actividad que puede subclasificar para forzar la conexión a un wifi específico: https://github.com/zoltanersek/android-wifi-activity/blob/master/app/src/main/java/com/zoltanersek/androidwifiactivity/ WifiActivity.java
Deberá subclasificar esta actividad e implementar sus métodos:
fuente
En el nivel de API 29, el
WifiManager.enableNetwork()
método está en desuso . Según la documentación de la API de Android (marque aquí ):Desde el nivel de API 29, para conectarse a la red WiFi, deberá usar
WifiNetworkSpecifier
. Puede encontrar un código de ejemplo en https://developer.android.com/reference/android/net/wifi/WifiNetworkSpecifier.Builder.html#build ()fuente
También intenté conectarme a la red. Ninguna de las soluciones propuestas anteriormente funciona para hugerock t70. Función wifiManager.disconnect (); no se desconecta de la red actual. Por lo tanto, no puede volver a conectarse a la red especificada. He modificado el código anterior. Para mí, el código bolow funciona perfectamente:
fuente
UID nnnnn does not have permission to update configuration xxxx. MD_START_CONNECT but no requests and connected, but app does not have sufficient permissions, bailing.
Prueba este método. Es muy fácil:
fuente