Android,

Android SDK: ¿Cómo detecto la conexión a Internet?

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 !



24 Comments

matias

noviembre 30, 2015

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

Sara

octubre 22, 2016

Hola matias estoy igual que tu… pudiste solucionar eso???

David Cleves

noviembre 15, 2015

Muchas gracias!!!

Me ha sido de mucha ayuda este tuto Amigo

Cristopher

septiembre 11, 2015

No sirve, el método getAllNetworkInfo esta deprecado, alguien sabe una solución más actual ?

Luis Manuel

enero 13, 2016

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;

Juan carlos

agosto 12, 2015

alguien sabe como puedo visualizar a que red wifi esta conectado y/0 poder acceder a las redes para cambiarla?

saludos!

Luis

agosto 16, 2017

lo solucionaste amigo??

Arnold Charris

julio 9, 2015

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.

David Cleves

noviembre 15, 2015

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

Felipe Nariño

marzo 4, 2015

Muchas Gracias !
Bastante util para suplir el modo desconectado de una aplicacion

Jorge Alexander Valencia Valencia

diciembre 16, 2014

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

Francisco Gracia

mayo 21, 2015

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.

Alberth Rumbo

septiembre 1, 2015

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.

Danny

noviembre 11, 2014

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.

Mauricio

julio 24, 2015

Hola Danny:
Tengo ese problema, ya que realmente quiero saber si tengo salida a internet.
Has logrado hacer esa validación???

Jorismos

mayo 12, 2014

Excelente funciona perfecto y sobre todo muy bien explicado donde va cada cosa.

Emiliano

febrero 26, 2014

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++) {

Diego Velez

noviembre 14, 2013

Excelente aporte muchas gracias, me funciono a la perfección.

Alfonso Osorio

noviembre 1, 2013

Excelente aporte hermano! me acabas de salvar la vida, muchas gracias :)

canihojr

julio 26, 2013

Si estas conectado a wifi, pero esta wifi no tiene internet, petada igualmente :))

Mark

abril 25, 2013

Good Excelente MUy bien

Jesus

diciembre 1, 2012

Gracias por el aporte, muy útil y sencillo de hacer :)

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.) […]

Leave a Reply to Emiliano Cancelar la respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.