Android: Compruebe la red y la conectividad real a internet.

A continuación se muestra el código de Android que funciona bien para verificar si la red está conectada o no.

public static boolean isNetworkAvailable(Context context) 
{
    ConnectivityManager mConnectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return (mConnectivityManager != null && mConnectivityManager.getActiveNetworkInfo().isConnectedOrConnecting()) ? true : false;
}

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

Pero tener una interfaz de red activa no garantiza que un servicio de red en particular esté disponible.

Ocurre mucho tiempo que estamos conectados a la red, pero aún no estamos disponibles para los servicios comunes de la red de Internet, por ejemplo. Google

Escenario común:

Dispositivo Android conectado a una red Wi-Fi, que resulta ser una red privada. Por lo tanto, isNetworkAvailable devolverá que la red está conectada, pero no se pudo conectar a ningún otro servicioAlgunas veces, la señal del teléfono muestra que está conectado al plan de datos del proveedor de servicios. así que la conectividad de la red es verdadera, pero aún no puede acceder a Google / Yahoo.

Una forma es verificar si la función "isNetworkAvailable" devuelve TRUE, luego ejecute el siguiente código

HttpGet request = new HttpGet(url));
   HttpParams httpParameters = new BasicHttpParams();
   int timeoutConnection = 60000;
   HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
   int timeoutSocket = 60000;
   HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

   DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
   request.addHeader("Content-Type", "application/json");
   HttpResponse response = httpClient.execute(request);

   HttpEntity entity = response.getEntity();


     if (entity != null)
      {
         result = EntityUtils.toString(entity);
      }

   }
 catch (SocketException e)
  {
     return "Socket Exceptiopn:" + e.toString();
  }
 catch (Exception e)
  {
     return "General Execption:" + e.toString();
  }

Pero creo que esta no es una buena manera porque puede consumir mucho tiempo

Entonces, ¿hay alguna otra forma eficiente (en términos de tiempo, velocidad) para asegurarnos de que estamos conectados a la red y de que podamos acceder a los servicios de Internet más comunes?

Respuestas a la pregunta(3)

Su respuesta a la pregunta