Si tu aplicación necesita conectarse a Internet resulta muy útil comprobar si disponemos de dicha conexión. Lo primero que vamos a añadir son los permisos al AndroidManifest.xml para que nuestro usuario disponga de dichos permisos. Sí, en realidad la aplicación se ejecuta en el sistema operativo y actúa como usuario UNIX a nivel de permisos. Vamos a ver el Manifest:
<uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission>
Necesitamos el acceso a Internet genérico y saber el estado de la red. En nuestra clase Java vamos a poner una función de verificación de la conexión, es muy sencilo:
public static boolean verificaConexion(Context ctx) { boolean bConectado = false; ConnectivityManager connec = (ConnectivityManager) ctx .getSystemService(Context.CONNECTIVITY_SERVICE); // No sólo wifi, también GPRS NetworkInfo[] redes = connec.getAllNetworkInfo(); // este bucle debería no ser tan ñapa for (int i = 0; i < 2; i++) { // ¿Tenemos conexión? ponemos a true if (redes[i].getState() == NetworkInfo.State.CONNECTED) { bConectado = true; } } return bConectado; }
Ahora que tenemos el método, vamos a usarlo en la parte que nos interese comprobar el estado de la conexión, típicamente puede ser inmediatamente después del super.onCreate(savedInstanceState); en nuestro onCreate. Si no es TRUE que tengamos conexión, lanzamos un Toast o mensajito por pantalla y salimos de la aplicación :
if (!verificaConexion(this)) { Toast.makeText(getBaseContext(), "Comprueba tu conexión a Internet. Saliendo ... ", Toast.LENGTH_SHORT) .show(); this.finish(); }
Hacemos todo esto porque si nuestra aplicación necesita conexión y no lo comprobamos ésta lanza una excepción y sale a las bravas, sin despedirse ni nada. Un FAIL en toda regla de programador.
Hasta la próxima !
matias
noviembre 30, 2015Hola el método funciona, en estos momentos lo estoy asignado a un botón enviar, pero como puedo hacer para que este siempre buscando si hay conexión.
Ejemplo de esto WhatsApp el cual esta siempre escuchando cuando hay conexión a Internet para poder enviar el mensaje, en segundo plano
ojalá me puedan ayudar
Sara
octubre 22, 2016Hola matias estoy igual que tu… pudiste solucionar eso???
David Cleves
noviembre 15, 2015Muchas gracias!!!
Me ha sido de mucha ayuda este tuto Amigo
Cristopher
septiembre 11, 2015No sirve, el método getAllNetworkInfo esta deprecado, alguien sabe una solución más actual ?
Luis Manuel
enero 13, 2016Amigo hasta en la versión 5.0 de android funciona, te lo digo porque yo lo uso en una app que desarrolle.
Valida que estés importando las librerías:
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
Juan carlos
agosto 12, 2015alguien sabe como puedo visualizar a que red wifi esta conectado y/0 poder acceder a las redes para cambiarla?
saludos!
Luis
agosto 16, 2017lo solucionaste amigo??
Arnold Charris
julio 9, 2015El codigo funciona perfectamente para detectar que el WIFI y los datos se encuentran deshabilitados, pero en realidad no valida que por ejemplo a pesar de que tenga los datos habilitados no tengo recursos de internet osea plan de datos. No se que podria adicionarle para que me valide que no tengo plan de datos o recursos.
David Cleves
noviembre 15, 2015Pues valide o contabilice el tempo que dura en resibir la peticion.
en realidad las grandes aplicaciones como youtube whatsApp hacen eso
y ps es muy facil
Felipe Nariño
marzo 4, 2015Muchas Gracias !
Bastante util para suplir el modo desconectado de una aplicacion
Jorge Alexander Valencia Valencia
diciembre 16, 2014Muchas gracias lo necesito pues mi apk accede a Internet pero sólo por WiFi con este código puedo hacer que acceda si el dispositivo tiene red de datos? Lo probaré pero si me puedo comunicar con Ud sería de gran ayuda
Francisco Gracia
mayo 21, 2015Hola… yo te puedo ayudar a hacer eso, identificar si estás conectado por Datos o por Wi-Fi… si gustas mandame un correo.
Saludos.
Alberth Rumbo
septiembre 1, 2015Hola Francisco, estoy interesado en poder identificar si la app (https://blogs.tunelko.com/2011/12/26/android-sdk-como-detecto-la-conexion-a-internet/) está conectada por datos o wifi, me gustaría que por favor me mandaras algo que me pueda servir a mi correo ajrumbo29@hotmail.com
Te agradezco mucho tu ayuda.
Danny
noviembre 11, 2014Hola no soy un experto en programación Android pero me parece que la función solo verifica si esta activado el trafico de datos y no así si tiene acceso a internet podría estar activado el trafico pero sin acceso a internet, pasa lo mismo con la conexión a wifí podría estar en una red pero sin conexión a internet, no se si me deje entender no digo que este mal la función, solo esa observación.
Mauricio
julio 24, 2015Hola Danny:
Tengo ese problema, ya que realmente quiero saber si tengo salida a internet.
Has logrado hacer esa validación???
Jorismos
mayo 12, 2014Excelente funciona perfecto y sobre todo muy bien explicado donde va cada cosa.
Emiliano
febrero 26, 2014Excelente! solo un pequeño detalle, Seria prudente modificar la siguiente linea!
for (int i = 0; i < 2; i++) {…
por:
for (int i = 0; i < redes.length; i++) {
Diego Velez
noviembre 14, 2013Excelente aporte muchas gracias, me funciono a la perfección.
Alfonso Osorio
noviembre 1, 2013Excelente aporte hermano! me acabas de salvar la vida, muchas gracias :)
canihojr
julio 26, 2013Si estas conectado a wifi, pero esta wifi no tiene internet, petada igualmente :))
Mark
abril 25, 2013Good Excelente MUy bien
Jesus
diciembre 1, 2012Gracias por el aporte, muy útil y sencillo de hacer :)
Tunelko. A technology point of blog. - Tu aplicación híbrida en Android con LungoJS
abril 27, 2012[…] Detectar conexión a Internet […]
Tunelko. A technology point of blog. - Intercambio de datos con JSON en Android SDK
enero 4, 2012[…] El código completo (se asume que debes tener permisos de acceso a INTERNET para nuestro AndroidManifest.xml y es conveniente comprobar nuestra conexión antes.) […]