Usando compileSdkVersion 23 , sin embargo, tratando de soportar desde 9.
getNetworkInfo(int)
fue desaprobado en 23. La sugerencia era usar getAllNetworks()
y en su getNetworkInfo(Network)
lugar. Sin embargo, ambos requieren un mínimo de API 21.
¿Hay una clase que podamos usar en el paquete de soporte que pueda ayudar con esto?
Sé que se propuso una solución antes , sin embargo, el desafío de mis requisitos mínimos de API de 9 plantea un problema.
Respuestas:
Puedes usar:
O en una caja de interruptor
fuente
activeNetwork.getType()
está en desuso y enConnectivityManager.TYPE_WIFI
desusocm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
En octubre de 2018, la respuesta aceptada está en desuso.
getType()
, y los tipos en sí mismos, ahora están en desuso en el API Nivel 28. Desde Javadoc:Para usarlo
NetworkCapabilities
, debe pasar unaNetwork
instancia algetNetworkCapabilities()
método. Para obtener esa instancia, debe llamargetActiveNetwork()
que se agregó en el API Nivel 23.Así que por ahora creo que la forma correcta de verificar con seguridad si está conectado a una red Wi-Fi o celular es:
También puede consultar otros tipos de
TRANSPORT
, que puede encontrar aquí .Nota importante: si está conectado a Wi-Fi y a una VPN, entonces su estado actual podría ser
TRANSPORT_VPN
, por lo que es posible que también desee verificarlo.No olvide agregar el siguiente permiso a su archivo AndroidManifest:
fuente
NetworkInfo
se deprecia, ya no puede usarNetWorkInfo
, entonces, ¿cómo proporciona esto una alternativa?Actualización de febrero de 2020:
La respuesta aceptada es obsoleta nuevamente
28 (Android P)
, pero su método de reemplazo solo funciona23 (Android M)
. Para admitir dispositivos más antiguos, escribí una función auxiliar en.Cómo utilizar:
Devuelve un
int
, puede cambiarloenum
en su código:Puede copiar la versión Kotlin o Java de la función auxiliar.
Kotlin:
Java:
fuente
No Internet
,Cellular
yWi-Fi
. Si no le importa el tipo de conexión, no dude en modificar el código para que se ajuste a su aplicación.Boolean
clase wrapper en lugar de laboolean
cual es primitiva. En la declaración if, tendrá que agregar check paranull
. Además, ¿qué pasa si mañana se introduce otro nuevo modo de transporte en NetworkCapabilities ... por lo que usar un número entero para la ramificación ayudará y también puede optar por los casos de cambio?Respuesta actualizada (19: 07: 2018):
Este método lo ayudará a verificar si la conexión a Internet está disponible.
Vieja respuesta:
Para la mejor práctica de reutilización de código, improvise la respuesta de Cheese Bread.
El código se puede colocar en la clase Util y se puede usar para verificar si el teléfono está conectado a Internet a través de Wifi o Internet móvil desde cualquier parte de su aplicación.
fuente
activeNetwork.isConnectedOrConnecting()
ahora está en desusoLa respuesta aceptada está en desuso en la versión 28, así que aquí está la solución que estoy usando en mi proyecto.
fuente
Responda febrero 2019
Para verificar si estás en línea:
Para obtener el tipo de conectividad a Internet antes / después de Android M
Todos los casos requieren un permiso para acceder al estado de la red
Como
NetworkInfo
está en desuso y a partir de la API 29 a partir de ahora, tenemos que usarloConnectivityManager.NetworkCallback
con sus cambios de estado de redonAvailable()
yonLost()
devoluciones de llamadas.Uso:
Caracteristicas
LifecycleObserver
para evitar pérdidas de memoria al hacer una limpieza enonDestroy()
método.BoradcastReceiver
yNetworkInfo
, y utilizaConnectivityManager.NetworkCallback
para la API 21 y superior.android.permission.ACCESS_NETWORK_STATE
; pero debe incluirlo si va a usar la clase de utilidad.Capacidades
fuente
onLost
le llamará.onLost
no significa que el dispositivo perdió la conexión a Internet, pero una red perdió la conexión.Es bueno verificar si su red está conectada a Internet:
fuente
NetworkCapabilities.NET_CAPABILITY_VALIDATED
.Versión Kotlin:
fuente
Como sugirió Cheese Bread , use getActiveNetworkInfo ()
ahora llame al método, para un uso seguro intente catch
Y no olvides agregar:
fuente
getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
Para estar seguro, sugeriría usar también el método
Todo el método podría ser el siguiente:
fuente
activeNetwork.getType()
está en desuso y enConnectivityManager.TYPE_WIFI
desusoAsí es como verifico si la red actual está usando celular o no en las últimas versiones de Android:
fuente
(Casi) Todas las respuestas están en desuso en Android P, así que aquí hay una
C#
solución ( que es fácil de seguir para los desarrolladores de Java )La clave aquí es
Android.Net.TransportType
fuente
Es posible que necesitemos verificar la conectividad a Internet más de una vez. Entonces nos será más fácil si escribimos el bloque de código en un método de extensión de
Context
. A continuación están mis extensiones de ayuda paraContext
yFragment
.Comprobación de la conexión a Internet
Otras extensiones
fuente
verificar si Internet está disponible
fuente
connectManager.getActiveNetwork () no se encuentra debajo de Android M (API 28). networkInfo.getState () está en desuso por encima de Android L.
Entonces, la respuesta final es:
fuente
Muchas respuestas todavía usan getNetworkType por debajo de 23, que está en desuso; use el siguiente código para verificar si el dispositivo tiene una conexión a Internet.
..
Y no olvides agregar esta línea en Manifiesto
fuente
Dado que las respuestas publicadas solo le permiten consultar la red activa, aquí le mostramos cómo obtener
NetworkInfo
cualquier red, no solo la activa (por ejemplo, la red Wifi) (lo siento, el código de Kotlin está por delante)Esto requiere API 21 o superior y el permiso
android.permission.ACCESS_NETWORK_STATE
fuente
cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
NetManager que puede usar para verificar la conexión a Internet en Android con Kotlin
Si usa minSdkVersion> = 23
Si usa minSdkVersion <23
fuente
https://www.agnosticdev.com/content/how-detect-network-connectivity-android
siga este tutorial, debería ayudar a cualquiera que busque respuestas.
tenga en cuenta que networkInfo ha quedado en desuso, por lo tanto, reemplácelo por isNetworkReacheable () con la respuesta @vidha a continuación, pasando getApplicationContext () como parámetro
fuente
fuente
Esto funciona para mí en Kotlin. Muchas API están en desuso en la clase Network Manager, por lo que la respuesta a continuación cubre todo el soporte de API.
También agregará a continuación
fuente
El siguiente código funciona en todas las API. (Kotlin)
Sin embargo, getActiveNetworkInfo () está en desuso solo en la API 29 y funciona en todas las API, por lo que podemos usarlo en todas las API por debajo de 29
fuente
Algo como esto:
Y en el cuerpo principal del programa:
fuente
Esto también funcionará en Android 10. Volverá verdadero si está conectado a Internet; de lo contrario, devolverá falso.
fuente