Necesito decir si mi dispositivo tiene conexión a Internet o no. Encontré muchas respuestas como:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(Tomado de Detect si hay una conexión a Internet disponible en Android ).
Pero esto no está bien, por ejemplo, si estoy conectado a una red inalámbrica que no tiene acceso a Internet , este método será verdadero ... ¿Hay alguna manera de saber si el dispositivo tiene conexión a Internet y no si solo está conectado? ¿a algo?
android
internet-connection
android-internet
Buda Gavril
fuente
fuente
isNetworkConnected
bloque de funciones contiene código en desuso para todosBuild.VERSION.SDK_INT >= Build.VERSION_CODES.M
. Puede encontrar una discusión más profunda sobre el asunto y cómo solucionarlo aquí stackoverflow.com/questions/53532406/…Respuestas:
Tienes razón. El código que ha proporcionado solo verifica si hay una conexión de red. La mejor manera de verificar si hay una conexión a Internet activa es intentar conectarse a un servidor conocido a través de http.
Por supuesto, puede sustituir la
http://www.google.com
URL por cualquier otro servidor al que desee conectarse, o un servidor que conozca tenga un buen tiempo de actividad.Como Tony Cho también señaló en este comentario a continuación , asegúrese de no ejecutar este código en el hilo principal, de lo contrario obtendrá una excepción NetworkOnMainThread (en Android 3.0 o posterior). Use una AsyncTask o Runnable en su lugar.
Si desea utilizar google.com, debe consultar la modificación de Jeshurun. En su respuesta , modificó mi código y lo hizo un poco más eficiente. Si te conectas a
y luego verifique el código de respuesta para 204
entonces no tiene que buscar primero toda la página de inicio de Google.
fuente
ConnectivityManager
no lo requiere). De lo contrario, en dispositivos Android 4.x +, obtendrá unaNetworkOnMainThread
excepción.He modificado ligeramente la respuesta de THelper, para usar un truco conocido que Android ya usa para verificar si la red WiFi conectada tiene acceso a Internet. Esto es mucho más eficiente que tomar toda la página de inicio de Google. Vea aquí y aquí para más información.
fuente
volver verdadero si Internet está realmente disponible
Asegúrate de tener estos dos permisos
si http no funciona es debido a la nueva seguridad de Android, no permiten la comunicación de texto sin formato ahora. por ahora solo para evitarlo.
fuente
Si está apuntando a Lollipop o superior, es posible usar la nueva clase NetworkCapabilities, es decir:
fuente
connectivityManager.getActiveNetwork();
requiere API lvl23 que es Marshmallow y no Lollipop.capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
parecía hacer el truco por mí!No necesariamente necesita hacer una conexión HTTP completa. Puede intentar simplemente abrir una conexión TCP a un host conocido y, si tiene éxito, tiene conectividad a Internet.
Entonces solo verifique con:
fuente
AsyncTask
Según las respuestas aceptadas, he creado esta clase con un oyente para que pueda usarla en el hilo principal:
Primero : la clase InterntCheck que verifica la conexión a Internet en segundo plano y luego llama a un método de escucha con el resultado.
Segundo : crea una instancia de la clase en el hilo principal y espera la respuesta (si has trabajado con Firebase api para Android antes de que esto te resulte familiar).
Ahora dentro del método onComplete obtendrá si el dispositivo está conectado a Internet o no.
fuente
prueba este
fuente
Puedes hacer esto usando el
ConnectivityManager
API para Android. Le permite verificar si está conectado a Internet y el tipo de conexión a Internet a la que está conectado. Básicamente, medido o no medido.Para verificar la conexión a internet.
Enlace de documentación: https://developer.android.com/training/monitoring-device-state/connectivity-status-type
fuente
Espero que el código anterior te ayude, también asegúrate de tener permiso de Internet en tu aplicación.
fuente
La última forma de hacerlo desde la documentación es utilizar
ConnectivityManager
para consultar la red activa y determinar si tiene conectividad a Internet.Agregue estos dos permisos a su archivo AndroidManifest.xml:
fuente
Verifique el tipo de wifi en el administrador de conectividad:
La documentación de Android describe 'TYPE_WIFI' como 'Una conexión de datos WIFI. Los dispositivos pueden admitir más de uno.
fuente
Una buena solución para verificar si la red activa tiene conexión a Internet:
fuente
Puedes usar ConnectivityManager.
Mira esto y esto
fuente
Use la siguiente clase , actualizada al último nivel de API: 29.
fuente