2012-04-11 19 views
1

Wie überprüfen Sie, ob ein Android-Gerät mit einer Internetverbindung verbunden ist? Derzeit ich den Code unten bin mit:Wie überprüft man die Verfügbarkeit der Internetverbindung, wenn das Gerät mit einem Router verbunden ist?

ConnectivityManager connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
boolean isConnectedToNetwork = (networkInfo != null && networkInfo.isConnected()); 

jedoch das Problem mit dem Code oben ist, dass es nur überprüft, ob das Gerät mit einem Netzwerk verbunden ist. Es prüft nicht, ob eine Internetverbindung verfügbar ist. Wenn das Gerät z. B. mit einem Router ohne Internetzugriff verbunden ist, gibt es für isConnectedToNetwork immer noch true zurück, da Sie technisch über das Netzwerk mit einem Netzwerk verbunden sind. Es ist nur so, dass der Router keine Internetverbindung hat.

Ein Vorschlag, den ich gesehen habe, ist zu versuchen, eine Verbindung zu einer Website herzustellen, die eine sehr geringe Chance hat, down zu sein. Ein Beispiel hierfür ist www.google.com. Ich denke jedoch, dass dies nicht die richtige Lösung dafür ist. Erstens, wenn der Benutzer GPRS verwendet und für seine Internetnutzung eine Gebühr pro KB berechnet, dann trägt er dafür zusätzliche Kosten. Zweitens halte ich es nicht für ethisch vertretbar, eine solche Website Dritter zu verwenden. Ist das wirklich die einzige Möglichkeit, nach einer Internetverbindung zu suchen, oder können Sie eine andere Lösung vorschlagen? Ist es wirklich in Ordnung, sich ohne ihre Zustimmung mit Google zu verbinden? Wie kann ich überprüfen, ob das Gerät über eine Internetverbindung verfügt?

Antwort

1

Verwenden ConnectivityManager.TYPE_WIFI

ConnectivityManager connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    boolean isConnectedToNetwork = (networkInfo != null && networkInfo.isConnected()); 
+1

Hallo. Danke für die Antwort. Das obige wird jedoch nur prüfen, ob das Gerät an eine WLAN-Schnittstelle angeschlossen ist. Es wird nicht überprüft, ob eine Internetverbindung verfügbar ist. – Arci

0
public boolean checkInternetConnection() { 

    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (conMgr.getActiveNetworkInfo() != null 
      && conMgr.getActiveNetworkInfo().isAvailable() 
      && conMgr.getActiveNetworkInfo().isConnected()) { 
     Log.d("Internet Connection Present",""); 
     isFound=true; 
    } else { 
     Log.d("Internet Connection Not Present",""); 
     isFound= false; 
    } 
    return isFound; 
} 
+1

Danke für die Antwort. IsConnected() überprüft jedoch nur, ob das Gerät mit einem Netzwerk verbunden ist. Es kann nicht feststellen, ob das Gerät eine Internetverbindung hat oder keine. Wenn Sie beispielsweise mit dem Router verbunden sind, gibt isConnected() immer den Wert true zurück, unabhängig davon, ob eine Internetverbindung besteht oder nicht. – Arci

+0

Wenn Sie es dann sicher machen, können Sie auch einen Thread erstellen, der eine Site für bessere Genauigkeit pingen kann, wenn Sie Internet über GPRS verwenden, dann können Sie die Verbindung mit PhoneStateListner überprüfen. – Sandeep

+0

@Arci isConnected() überprüft nicht nur, ob Gerät ist mit dem Router verbunden, aber gemäß der Dokumentation: "Gibt an, ob eine Netzwerkverbindung besteht und Verbindungen hergestellt und Daten weitergeleitet werden können. Rufen Sie dies immer vor dem Versuch auf, Datentransaktionen durchzuführen." –

2
public boolean isOnline(Context context) { 
    try { 
     ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (cm.getActiveNetworkInfo().isConnectedOrConnecting()) { 
      URL url = new URL("http://www.ripansekhon.blogspot.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url .openConnection(); 
      urlc.setRequestProperty("User-Agent", "test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1000); // mTimeout is in seconds 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

Check diese Funktion, um zu überprüfen, ob Internet funktioniert oder nicht, bedeutet Webseite öffnet oder nicht Hoffnung dieser Code hilft, alle Menschen, die Internet will, ist funktioniert oder nicht neben Netzwerk ist verbunden oder nicht