747 Stimmen

Erkennen, ob eine Internetverbindung auf Android verfügbar ist

Mögliches Duplikat:
Wie kann man den Internetzugang unter Android überprüfen? InetAddress schaltet nie ab

Ich muss erkennen, ob das Android-Gerät mit dem Internet verbunden ist.

El NetworkInfo Klasse bietet eine nicht-statische Methode isAvailable() Das klingt perfekt.

Das ist das Problem:

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

löst diesen Fehler aus:

The constructor NetworkInfo is not visible.

Sicher ist, dass es eine andere Klasse gibt, die eine NetworkInfo Objekt. Aber ich weiß nicht, welches.

  1. Wie funktioniert der obige Codeschnipsel?
  2. Wie hätte ich die Informationen, die ich brauchte, in der Online-Dokumentation finden können?
  3. Können Sie einen besseren Weg für diese Art der Erkennung vorschlagen?

6 Stimmen

[Dies][1] könnte ebenfalls hilfreich sein [1]: stackoverflow.com/questions/6179906/

2 Stimmen

2 Stimmen

Keine der Antworten hier beantwortet tatsächlich die Frage, ob eine Verbindung zum Internet besteht, sondern nur, ob Sie überhaupt mit einem Netzwerk verbunden sind. In dieser Antwort finden Sie ein Beispiel für den Versuch, eine ausgehende TCP-Verbindung herzustellen, um dies zu testen: stackoverflow.com/a/35647792/1820510

1493voto

Alex Jasmin Punkte 38232

El getActiveNetworkInfo() Methode der ConnectivityManager gibt eine NetworkInfo Instanz, die die erste angeschlossene Netzwerkschnittstelle darstellt, die es finden kann, oder null wenn keine der Schnittstellen angeschlossen ist. Prüfen, ob diese Methode den Wert null sollte ausreichen, um festzustellen, ob eine Internetverbindung verfügbar ist oder nicht.

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

Sie benötigen außerdem:

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

in Ihrem Android-Manifest.

Bearbeiten:

Beachten Sie, dass eine aktive Netzwerkschnittstelle keine Garantie dafür ist, dass ein bestimmter Netzwerkdienst verfügbar ist. Netzwerkprobleme, Serverausfälle, schwaches Signal, unverschlüsselte Portale, Inhaltsfilter und Ähnliches können verhindern, dass Ihre App einen Server erreicht. Sie können zum Beispiel nicht mit Sicherheit sagen, ob Ihre Anwendung Twitter erreichen kann, bis Sie eine gültige Antwort vom Twitter-Dienst erhalten.

262voto

Squonk Punkte 48341

Ich überprüfe sowohl das Wi-fi als auch das mobile Internet wie folgt...

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

Natürlich könnte es leicht geändert werden, um einzelne spezifische Verbindungstypen zu prüfen, z. B. wenn Ihre Anwendung die potenziell höheren Geschwindigkeiten von Wi-fi benötigt, um korrekt zu funktionieren usw.

80voto

Vivek Parihar Punkte 2298

Schritt 1: Erstellen Sie eine Klasse AppStatus in Ihrem Projekt (Sie können auch einen anderen Namen vergeben). Dann fügen Sie bitte die unten angegebenen Zeilen in Ihren Code ein:

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

Schritt 2: Um zu prüfen, ob Ihr Gerät über eine Netzwerkverbindung verfügt, fügen Sie einfach diesen Codeschnipsel an der Stelle ein, die Sie prüfen möchten.

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!!!!");    
}

14voto

Octavian A. Damiean Punkte 39044

Noch ein wichtiger Hinweis. Sie müssen die android.permission.ACCESS_NETWORK_STATE in Ihrer AndroidManifest.xml, damit dies funktioniert.

Wie hätte ich die Informationen, die ich brauchte, in der Online-Dokumentation finden können?

Sie müssen nur die Dokumentation der Klassen richtig lesen und Sie werden alle Antworten finden, die Sie suchen. Sehen Sie sich die Dokumentation auf ConnectivityManager . Die Beschreibung sagt Ihnen, was zu tun ist.

13voto

axllaruse Punkte 129

Die Methode getActiveNetworkInfo() von ConnectivityManager gibt eine NetworkInfo-Instanz zurück, die das erste verbundene Netzwerk darstellt Schnittstelle repräsentiert, die sie finden kann, oder null, wenn keine der Schnittstellen verbunden ist. Die Prüfung, ob diese Methode null zurückgibt, sollte ausreichen, um festzustellen, ob eine Internetverbindung verfügbar ist.

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

Sie benötigen außerdem:

in Ihrem Android-Manifest.

Bearbeiten:

Beachten Sie, dass eine aktive Netzwerkschnittstelle keine Garantie dafür ist, dass ein bestimmter Netzwerkdienst verfügbar ist. Netzwerkprobleme, Server Ausfallzeiten, schwaches Signal, unverschlüsselte Portale, Inhaltsfilter und ähnliches können verhindern, dass Ihre Anwendung einen Server erreicht. Sie können zum Beispiel Sie können nicht mit Sicherheit sagen, ob Ihre App Twitter erreichen kann, bis Sie eine gültige Antwort vom Twitter-Dienst erhalten.

getActiveNetworkInfo() sollte nicht immer null ergeben. Ich weiß nicht, was sie sich gedacht haben, als sie sich das ausgedacht haben. Es sollte immer ein Objekt liefern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X