No quiero que mi usuario incluso intente descargar algo a menos que tengan Wi-Fi conectado. Sin embargo, parece que solo puedo decir si el Wi-Fi está habilitado, pero aún podrían tener una conexión 3G.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
Sin embargo, el estado no es lo que esperaría. A pesar de que el Wi-Fi está conectado, estoy obteniendo OBTAINING_IPADDR
el estado.
fuente
android.permission.ACCESS_NETWORK_STATE
a su AndroidManifest.xml para que esto funcione.connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Dado que el método NetworkInfo.isConnected () ahora está en desuso en API-23 , aquí hay un método que detecta si el adaptador de Wi-Fi está encendido y también conectado a un punto de acceso usando WifiManager:
fuente
NetworkInfo.isConnected()
no me parece obsoletoandroid.permission.ACCESS_WIFI_STATE
Simplemente uso lo siguiente:
Que devolverá uno de estos estados en el momento en que llame a getSupplicantState ();
fuente
Estoy usando esto en mis aplicaciones para verificar si la red activa es Wi-Fi:
fuente
active
red (la que se utilizará para descargar) sea WiFiNetworkInfo#isConnected
está en desusoEché un vistazo a algunas preguntas como esta y se me ocurrió esto:
Lo uso para mi verificación de licencia en Root Toolbox PRO, y parece funcionar muy bien.
fuente
getNetworkInfo()
devolverá un valor nulo si la red no existe. Entonces, si el dispositivo no tiene conexión móvil, esto arrojará un error. En la mayoría de los casos, TYPE_ETHERNET causará un nulo en este caso, ya que la mayoría de los dispositivos no tendrán una conexión Ethernet.Si bien la respuesta de Jason es correcta, hoy en día getNetWorkInfo (int) es un método obsoleto. Entonces, la siguiente función sería una buena alternativa:
fuente
Usando
WifiManager
usted puede hacer:El método getNeworkId devuelve -1 solo cuando no está conectado a una red;
fuente
fuente
boolean isConnectedOrConnecting ()
Indica si existe conectividad de red o está en proceso de ser establecida. Esto es bueno para aplicaciones que necesitan hacer algo relacionado con la red que no sea leer o escribir datos. Para este último, llame en suisConnected()
lugar, lo que garantiza que la red sea totalmente utilizable.El siguiente código (en Kotlin) funciona desde API 21 hasta al menos la versión API actual (API 29). La función getWifiState () devuelve uno de los 3 valores posibles para el estado de la red WiFi: Disable, EnabledNotConnected y Connected que se definieron en una clase enum. Esto permite tomar decisiones más detalladas, como informar al usuario que habilite WiFi o, si ya está habilitado, conectarse a una de las redes disponibles. Pero si todo lo que se necesita es un valor booleano que indique si la interfaz WiFi está conectada a una red, entonces la otra función esWifiConnected () le dará eso. Utiliza el anterior y compara el resultado con Connected.
Está inspirado en algunas de las respuestas anteriores, pero trata de resolver los problemas introducidos por la evolución de las API de Android o la disponibilidad cada vez mayor de IP V6. El truco era usar:
en vez de:
De acuerdo con la documentación: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid devolverá nulo si no está conectado a una red. E incluso si no tenemos permiso para obtener el valor real, aún devolverá algo más que nulo si estamos conectados.
También tenga en cuenta lo siguiente:
En el Manifiesto, no olvides agregar:
El código propuesto es:
fuente
La
NetworkInfo
clase está en desuso a partir del nivel 29 de API, junto con los métodos de acceso relacionados comoConnectivityManager#getNetworkInfo()
yConnectivityManager#getActiveNetworkInfo()
.La documentación ahora sugiere que las personas usen la
ConnectivityManager.NetworkCallback
API para el monitoreo de devolución de llamada asincrónica, o que usenConnectivityManager#getNetworkCapabilities
oConnectivityManager#getLinkProperties
para el acceso sincronizado de la información de la redPara verificar si WiFi está conectado, aquí está el código que uso:
Kotlin:
Java:
Recuerde agregar también permiso
ACCESS_NETWORK_STATE
a su archivo de manifiesto.fuente
Prueba este método.
Este método ayudará a encontrar la conexión a Internet disponible o no.
fuente
Esto funciona para mi:
Y agregue este permiso:
fuente
Muchas de las respuestas usan código obsoleto, o código disponible en versiones API más altas. Ahora uso algo como esto
fuente
Esto es lo que uso como método de utilidad en mis aplicaciones:
fuente
En nueva versión de Android
y agregar premisión también
fuente
connManager.getAllNetworks()
requiere API nivel 21.Similar a la respuesta de @Jason Knight, pero a la manera de Kotlin:
fuente
ConnectivityManager.TYPE_WIFI
está en desusoEsta es una solución más fácil. Consulte la pregunta sobre desbordamiento de pila Comprobación de Wi-Fi habilitado o no en Android .
PD: No olvide agregar el código al archivo manifest.xml para permitir el permiso. Como se muestra abajo.
fuente
Tratar
Esto devuelve 0 hasta que el dispositivo tenga una conexión utilizable (en mi máquina, un Samsung SM-T280, Android 5.1.1).
fuente
Puede activar WIFI si no está activado como se indica a continuación: 1. verifique el estado de WIFI según lo respondió @Jason Knight 2. si no está activado, actívelo, no olvide agregar el permiso de WIFI en el archivo de manifiesto
Tu clase de Java debería ser así
}
fuente
Agregue esto para JAVA:
en el archivo de manifiesto agregue los siguientes permisos:
fuente
Una vieja pregunta, pero esto es lo que uso. requiere una API mínima, el nivel 21 también tiene en cuenta las API de Networkinfo en desuso.
fuente