«

»

nov 28 2011

Comprobar si el dispositivo tiene conexión a internet

Sé que hay gente que no sabe como comprobar si tiene conexión a internet desde su aplicación así que este tutorial va dirigido especialmente a ellos pero seguro que será interesante para muchos otros, empecemos…

Para saber si tenemos conexión es muy sencillo, tan solo debemos copiar esta función en nuestro proyecto y llamarla directamente, el resultado sera verdadero si y sólo si tenemos acceso a internet en el momento de lanzarla.

1
2
3
4
5
6
7
8
9
10
11
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo netInfo = cm.getActiveNetworkInfo();

if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}

return false;
}

Actualización: Tal como nos comenta @kilik85 por twitter se nos había olvidado indicar los permisos que son necesarios añadir al Manifest de nuestra aplicación para que funcione correctamente, aquí los tenéis:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Acerca del autor

Kix2902

Programador vocacional, geek y twittero de pro. Cofundador de @RedInput. Y sobre todo Fandroid moderado.

  • cristian

    realmente no funciona.

    si estoy conectado a la red wifi pero la red wifi no tiene acceso dice que si tengo acceso.

    ejemplo:
    android——-wifi———//——-internet

    si me puedes ayudar te agradezco

    • trinoeg8

      Te dice que tiene acceso por los valores que regresa,, checa el nombre del método…isOnline
      Si tu quieres saber si no tiene acceso a internet tienes que llamar al método de la siguiente forma:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
        if (!isOnline()){
                 Toast.makeText(Localizar.this,
                          "Verifique su conexión a internet",
                          Toast.LENGTH_LONG).show();
             }
             else{
                 Toast.makeText(Localizar.this,
                          "Conexión activa",
                          Toast.LENGTH_LONG).show();
      }

      Espero darme a entender… lo tuyo fue una cuestión de lógica ya que el método funciona bien.
      Saludos!

  • Alberto

    El compañero tiene razón lo que se comprueba es si el wifi está habilitado o no pero no si la conexión a internet está funcionando.

  • Sergio

    Exelente

  • sergio

    Hola sigue sin funcionar el metodo valida Si esta conectado a wifi pero no Si realmente el dispocitivo tiene internet o no .

  • pablo el bambino

    No valida que tiene conexion a internet solo si esta en un red wifi. Apesta!

  • http://www.albertalvarezbruned.com albert alvarez

    public static boolean verificaConexion(Context ctx) {
    boolean bConectado = false;
    ConnectivityManager connec = (ConnectivityManager) ctx
    .getSystemService(Context.CONNECTIVITY_SERVICE);
    // No solo wifi, tambien GPRS
    NetworkInfo[] redes = connec.getAllNetworkInfo();
    // este bucle deberia no ser tan nyapa
    for (int i = 0; i < 2; i++) {
    // Tenemos conexion? ponemos a true
    if (redes[i].getState() == NetworkInfo.State.CONNECTED) {
    bConectado = true;
    }
    }
    return bConectado;
    }
    Este sí que funciona, se pone en la Activity, y en onCreate se pone por ejemplo:
    if (!verificaConexion(this))
    {
    Value.CANCEL_TASK=true;//o lo que sea
    }

    la fuente es de:
    http://blogs.tunelko.com/2011/12/26/android-sdk-como-detecto-la-conexion-a-internet/

    saludos

  • https://www.facebook.com/josby11 Jose Sotelo

    me pueden ayudar creo un webview y cuando ingreso una dirección web ,e sale error http 401.2 .
    viendo un aplaicion parecida pero q si funciona veo q tiene permiso de recibir datos de internet
    como le doy este permiso q aparece e e celular en la seccion de permisos de la aplicacion

  • http://gravatar.com/sigmasyd sigmasyd

    En el archivo manifest debes agregar el siguiente permiso:

    • https://www.facebook.com/Zairon32 Andres Sanchez H

      ??

  • Jesús Márquez

    Que paquete hay q importar para que conozca this.getSystemService ????. Gracias un saludo.

  • L0k1

    Hola estoy checando tu codigo, pero no se tipo de variable es Localizar, y &amp tampoco lo reconoce! me puede alguien echar la mano con esto!?

  • L0k1

    y &amp no lo reconoce. haber si alguien me ayuda!