Wie überprüfen Sie die Internetverbindung in Android?

Ich möchte die Internetverbindung für jede Aktivität überprüfen. Wenn es verloren geht, sollte eine Nachricht angezeigt werden.

Kann mir irgendjemand sagen, wie ich das erreichen kann?

Sie können den ConnectivityManager verwenden , um den Netzwerkstatus zu überprüfen.

ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) { // notify user you are online } else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) { // notify user you are not online } 

Beachten Sie, dass die Konstanten ConnectivityManager.TYPE_MOBILE und ConnectivityManager.TYPE_WIFI Verbindungstypen darstellen und diese beiden Werte nicht erschöpfend sind. Sehen Sie hier für eine erschöpfende Liste.


Stellen Sie außerdem sicher, dass Sie über die erforderliche Berechtigung zum Überwachen des Netzwerkstatus verfügen. Sie müssen diese Berechtigung zu Ihrer AndroidManifest.xml hinzufügen:

  

An einem Punkt kann nur eine Verbindung aktiv sein. Eine einfachere Antwort lautet also:

 final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { // notify user you are online } else { // notify user you are not online } 

Es bietet auch für jede neue Art von Netzwerk wie ConnectivityManager # TYPE_WIMAX


Stellen Sie außerdem sicher, dass Sie über die erforderliche Berechtigung zum Überwachen des Netzwerkstatus verfügen. Sie müssen diese Berechtigung zu Ihrer AndroidManifest.xml hinzufügen:

  

Sie können dies für verschiedene Arten von Netzwerkstatus tun

 public void checkNetworkStatus(){ final ConnectivityManager connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if( wifi.isAvailable() ){ Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show(); } else if( mobile.isAvailable() ){ Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show(); } } 

Sie können die Netzabdeckung und Datenverfügbarkeit von Mobile und Wi-Fi direkt mit überprüfen

Für die Verfügbarkeit der Netzwerkabdeckung

 private boolean isNetworkAvailable() { ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable())); } 

Für Datenverfügbarkeit, wenn Netzwerk verfügbar ist

 private boolean isDataAvailable() { ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected())); } 

Korrektur

 if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ) { //notify user you are online } 

sollte sein

 if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) { //notify user you are online } 

Registrieren Sie einen Broadcast-Empfänger, um CONNECTIVITY_ACTION zu verarbeiten . Sehen Sie sich dieses vollständige Beispiel an . Sie sollten eine statische Variable ‘connectionAvailable’ aktualisieren, die überall und jederzeit über den jeweiligen Getter zugänglich ist.

Denken Sie daran, den Broadcast-Empfänger in der Manifest- Datei zu deklarieren:

      

In Bezug auf das “Einchecken jeder Aktivität” wären Sie möglicherweise daran interessiert, eine durch Ihre Aktivitäten erweiterte BaseActivity zu verwenden und den Verbindungstest zu verwalten und die Nachricht anzuzeigen.

Beachten Sie auch, dass die Verwendung von Ereignissen (kein Abrufen von Aktivitäten) effizienter ist.

Sie verwenden nicht ConnectivityManager.getNetworkInfo(0).getState() und ConnectivityManager.getNetworkInfo(1).getState() , statt die Werte (1) und (0) fest zu codieren, verwenden Sie ConnectivityManager.TYPE_WIFI und ConnectivityManager.TYPE_MOBILE

Dies ist eine boolesche Prüfung, um zu sehen, ob Sie Netzwerkzugriff haben. Es bestimmt nicht, welche Art von Netzwerkzugriff – mobil, WLAN …, es überprüft nur, ob Sie online sind.

 boolean mobileNwInfo = false; ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); } catch (NullPointerException e) { mobileNwInfo = false; } if ( mobileNwInfo == false ) { // Your code goes here... }