2011-03-29 16 views
28

También quiero ejecutar mi aplicación fuera de línea, por lo que debo verificar si actualmente hay una conexión a Internet disponible o no. ¿Alguien puede decirme cómo verificar si internet está disponible o no en Android? Dé el código de muestra. Probé con el código de abajo y comprueba mediante un emulador pero no está funcionandoCómo verificar actualmente la conexión a Internet está disponible o no en android

public boolean isInternetConnection() 
{ 

    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

Gracias

+0

¿Qué es exactamente no está funcionando –

Respuesta

43

Esto le dirá si estás conectado a una red:

boolean connected = false; 
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
      connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { 
     //we are connected to a network 
     connected = true; 
    } 
    else 
     connected = false; 

Advertencia: Si está conectado a una red WiFi que no incluye acceso a Internet o requiere autenticación basada en navegador, connected seguirá siendo cierto.

Usted necesita este permiso en su manifiesto:

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

hola. He utilizado el mismo código en mi aplicación en el sistema operativo Android 4.0. pero está dando una excepción de puntero nulo. –

+0

posiblemente su dispositivo Android 4.0 no tenga conectividad type_mobile – arnodenhond

+0

BTW, también debe verificar connectivityManager.getNetworkInfo (ConnectivityManager.TYPE_MOBILE)! = Null, o puede obtener NullPointer en algunas tabletas –

14

Además, tenga en cuenta que a veces el usuario se conecta a una red Wi-Fi, pero que la red puede requerir la autenticación basada en navegador. La mayoría de los hotspots de hoteles y aeropuertos son así, por lo que su aplicación podría ser engañada al pensar que tiene conectividad, y luego cualquier recuperación de URL realmente recuperará la página de inicio de sesión del punto de acceso en lugar de la página que está buscando.

Dependiendo de la importancia de realizar este control, además de verificar la conexión con ConnectivityManager, sugiero incluir un código para verificar que se trata de una conexión a Internet que funcione y no solo una ilusión. Puede hacerlo tratando de obtener una dirección/recurso conocido de su sitio, como una imagen 1x1 PNG o un archivo de texto de 1 byte.

+2

Gracias por la publicación y bienvenido a Stackoverflow. Como un FYI, no debe incluir una firma en sus publicaciones aquí. –

+0

hehehe ... pwned – binnyb

7

Uso continuación Código:

private boolean isNetworkAvailable() { 
ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 

}

si isNetworkAvailable() vuelve true continuación de conexión a internet, de lo contrario la conexión a Internet no está disponible

Aquí tienen que añadir a continuación uses- Permiso en su aplicación Manifiesto archivo

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

uso el siguiente código:

public static boolean isNetworkAvaliable(Context ctx) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    if ((connectivityManager 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED) 
      || (connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI) 
        .getState() == NetworkInfo.State.CONNECTED)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

recuerde que yo tiene por qué poner en su manifiesto de la siguiente línea:

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

puede simplemente tratar de establecer una conexión TCP con un mando a distancia host:

public boolean hostAvailable(String host, int port) { 
    try (Socket socket = new Socket()) { 
    socket.connect(new InetSocketAddress(host, port), 2000); 
    return true; 
    } catch (IOException e) { 
    // Either we have a timeout or unreachable host or failed DNS lookup 
    System.out.println(e); 
    return false; 
    } 
} 

Then:

boolean online = hostAvailable("www.google.com", 80); 
+0

Se requiere nivel de API 19 para este enfoque –

0

trate de usar ConnectivityManager

ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
return false 

Además Añadir permiso para AndroidManifest.xml

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

Utilice el método checkConnectivity:

if (checkConnectivity() == 1){ 
    //do something 

    } 

Método para comprobar su conectividad:

private int checkConnectivity() { 
     boolean enabled = true; 

     ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = connectivityManager.getActiveNetworkInfo(); 

     if ((info == null || !info.isConnected() || !info.isAvailable())) { 
      internet = 0;//sin conexion 
      Toast.makeText(getApplicationContext(), "Sin conexión a Internet...", Toast.LENGTH_SHORT).show(); 
      enabled = false; 
     } else { 
      internet = 1;//conexión 
     } 

     return internet; 
    } 
0
package com.base64; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Base64; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.androidquery.AQuery; 

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if(isConnectingToInternet(MainActivity.this)) 
     { 
      Toast.makeText(getApplicationContext(),"internet is available",Toast.LENGTH_LONG).show(); 
     } 
     else { 
      System.out.print("internet is not available"); 
     } 
    } 

    public static boolean isConnectingToInternet(Context context) 
    { 
     ConnectivityManager connectivity = 
       (ConnectivityManager) context.getSystemService(
         Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 
     } 
     return false; 
    } 
} 

/* manifest */ 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.base64"> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
Cuestiones relacionadas