Android: Überprüfen Sie das Netzwerk und die Internetverbindung

Unten sehen Sie den Code für Android, mit dem Sie überprüfen können, ob das Netzwerk verbunden ist oder nicht.

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" />

Eine aktive Netzwerkschnittstelle garantiert jedoch nicht, dass ein bestimmter Netzwerkdienst verfügbar ist.

Es passiert viel Zeit, dass wir mit dem Netzwerk verbunden sind, aber immer noch nicht mit üblichen Internet-Netzwerkdiensten erreichbar sind, z. Google

Allgemeines Szenario:

Android-Gerät ist mit einem WLAN verbunden, das sich als privates Netzwerk herausstellt. IsNetworkAvailable gibt also zurück, dass das Netzwerk verbunden ist, jedoch keine Verbindung zu einem anderen Dienst herstellen konnteManchmal zeigt das Telefonsignal an, dass eine Verbindung zum Datenplan des Dienstanbieters besteht. Die Netzwerkkonnektivität stimmt also, der Zugriff auf Google / Yahoo ist jedoch weiterhin nicht möglich.

Eine Möglichkeit besteht darin, zu überprüfen, ob die Funktion "isNetworkAvailable" den Wert TRUE zurückgibt, und dann den folgenden Code auszuführen

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();
  }

Aber ich denke, das ist kein guter Weg, weil es viel Zeit in Anspruch nehmen kann

Gibt es also eine Alternative, die effizient (in Bezug auf Zeitaufwand, Geschwindigkeit) dafür sorgt, dass wir mit dem Netzwerk verbunden und für die meisten gängigen Internetdienste erreichbar sind?