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 !
Hola 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
Hola matias estoy igual que tu… pudiste solucionar eso???
Muchas gracias!!!
Me ha sido de mucha ayuda este tuto Amigo
No sirve, el método getAllNetworkInfo esta deprecado, alguien sabe una solución más actual ?
Amigo 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;
alguien sabe como puedo visualizar a que red wifi esta conectado y/0 poder acceder a las redes para cambiarla?
saludos!
lo solucionaste amigo??
El 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.
Pues 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
Muchas Gracias !
Bastante util para suplir el modo desconectado de una aplicacion
Muchas 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
Hola… yo te puedo ayudar a hacer eso, identificar si estás conectado por Datos o por Wi-Fi… si gustas mandame un correo.
Saludos.
Hola 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.
Hola 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.
Hola Danny:
Tengo ese problema, ya que realmente quiero saber si tengo salida a internet.
Has logrado hacer esa validación???
Excelente funciona perfecto y sobre todo muy bien explicado donde va cada cosa.
Excelente! 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++) {
Excelente aporte muchas gracias, me funciono a la perfección.
Excelente aporte hermano! me acabas de salvar la vida, muchas gracias :)
Si estas conectado a wifi, pero esta wifi no tiene internet, petada igualmente :))
Good Excelente MUy bien
Gracias por el aporte, muy útil y sencillo de hacer :)
Pingback: Tunelko. A technology point of blog. - Tu aplicación híbrida en Android con LungoJS
Pingback: Tunelko. A technology point of blog. - Intercambio de datos con JSON en Android SDK