Pregunta

necesito para detectar si el dispositivo Android está conectado a Internet.

La clase NetworkInfo proporciona un método no estático isAvailable() que suena perfecto.

El problema es que:

NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}

lanza este error:

The constructor NetworkInfo is not visible.
apuesta

seguro es que hay otra clase que devuelve un objeto NetworkInfo. Pero no sé qué.

  1. ¿Cómo obtener el fragmento de código anterior al trabajo?
  2. ¿Cómo me he encontrado la información que necesita en la documentación en línea?
  3. ¿Puede sugerir una mejor manera para que este tipo de detección?
¿Fue útil?

Solución

El método getActiveNetworkInfo() de ConnectivityManager devuelve una instancia NetworkInfo que representa la primera red conectada interfaz se puede encontrar o null si ninguna de las interfaces están conectados. Comprobación de si esto null devuelve el método debería ser suficiente para decir si una conexión a Internet está disponible o no.

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

También necesitará:

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

en su manifiesto de Android.

Editar

Tenga en cuenta que tener una interfaz de red activa no garantiza que un servicio de red en particular está disponible. problemas de la red, el tiempo de inactividad del servidor, baja señal, portales cautivos, filtros de contenido y similares pueden prevenir toda su aplicación llegue a un servidor. Por ejemplo no se puede saber con certeza si su aplicación puede llegar a Twitter hasta que reciba una respuesta válida desde el servicio de Twitter.

Otros consejos

verifico tanto para Wi-Fi y conexión a internet móvil de la siguiente manera ...

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

Obviamente, podría ser modificado fácilmente para comprobar si hay tipos de conexión específicos individuales, por ejemplo, si su aplicación necesita las velocidades potencialmente más altos de Wi-Fi para que funcione correctamente, etc.

Paso 1: Crear un AppStatus clase en su proyecto (que puede dar cualquier otro nombre también). Entonces, por favor pegue la figura a continuación las líneas en su código:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;


public class AppStatus {

    private static AppStatus instance = new AppStatus();
    static Context context;
    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;
    boolean connected = false;

    public static AppStatus getInstance(Context ctx) {
        context = ctx.getApplicationContext();
        return instance;
    }

    public boolean isOnline() {
        try {
            connectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        connected = networkInfo != null && networkInfo.isAvailable() &&
                networkInfo.isConnected();
        return connected;


        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
            Log.v("connectivity", e.toString());
        }
        return connected;
    }
}

Paso 2: Ahora, para comprobar si la conectividad de red a su dispositivo tiene entonces sólo tiene que añadir este fragmento de código donde cada vez que desea comprobar ...

if (AppStatus.getInstance(this).isOnline()) {

    Toast.makeText(this,"You are online!!!!",8000).show();

} else {

    Toast.makeText(this,"You are not online!!!!",8000).show();
    Log.v("Home", "############################You are not online!!!!");    
}

También otra nota importante. Usted tiene que fijar en su android.permission.ACCESS_NETWORK_STATE AndroidManifest.xml para que esto funcione.

  

_ ¿cómo podría yo he encontrado la información que necesita en la documentación en línea?

Usted sólo tiene que leer la documentación de las clases lo suficientemente bien y usted encontrará todas las respuestas que está buscando. Echa un vistazo a la documentación sobre ConnectivityManager . La descripción que dice qué hacer.

  

El método getActiveNetworkInfo () de ConnectivityManager devuelve una   ejemplo NetworkInfo que representa la primera red conectada   interfaz se puede encontrar o nula si ninguno si las interfaces están conectados.   Comprobación de si esto nula devuelve el método debería ser suficiente para decir si una   conexión a Internet está disponible.

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

También necesitará:

  

en su   androide manifiesto.

     

Editar:

     

Tenga en cuenta que tener una interfaz de red activa no garantiza que una   servicio particular de red está disponible. problemática de las redes, servidores   el tiempo de inactividad, baja señal, portales cautivos, los filtros de contenido y similares   puede prevenir toda su aplicación llegue a un servidor. Por ejemplo, usted   no se puede saber con certeza si su aplicación puede llegar a Twitter hasta que reciba una   respuesta válida desde el servicio de Twitter.

getActiveNetworkInfo () no debe nunca darse nula. No sé lo que estaban pensando cuando se les ocurrió eso. Se le debe dar un objeto siempre.

Probablemente me he encontrado:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top