wake-up-neo.com

Ermitteln, ob auf Android eine Internetverbindung verfügbar ist

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

Die Klasse NetworkInfo bietet eine nicht statische Methode isAvailable(), die sich perfekt anhört.

Problem ist, dass:

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

wirft diesen Fehler:

The constructor NetworkInfo is not visible.

Mit Sicherheit gibt es eine andere Klasse, die ein NetworkInfo -Objekt zurückgibt. Aber ich weiß nicht welche.

  1. Wie kann ich das obige Codefragment zum Laufen bringen?
  2. Wie hätte ich die Informationen finden können, die ich in der Online-Dokumentation benötigte?
  3. Können Sie einen besseren Weg für diese Art der Erkennung vorschlagen?
655
dan

Die getActiveNetworkInfo() -Methode von ConnectivityManager gibt eine NetworkInfo -Instanz zurück, die die erste verbundene Netzwerkschnittstelle darstellt, die sie finden kann, oder null, wenn keine der Schnittstellen verbunden ist. Die Überprüfung, ob diese Methode null zurückgibt, 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.getActiveNetworkInfo();
    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 nicht garantiert, dass ein bestimmter Netzwerkdienst verfügbar ist. Netzwerkprobleme, Serverausfallzeiten, schwaches Signal, unverlierbare Portale, Inhaltsfilter und dergleichen können dazu führen, dass Ihre App keinen Server erreicht. Zum Beispiel können Sie nicht sicher sagen, ob Ihre App Twitter erreichen kann, bis Sie eine gültige Antwort vom Twitter-Dienst erhalten.

1367
Alex Jasmin

Ich überprüfe wie folgt, ob WLAN und mobiles Internet verfügbar sind ...

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

Es ist offensichtlich, dass es leicht geändert werden kann, um nach bestimmten Verbindungstypen zu suchen, z. B. wenn Ihre App die möglicherweise höheren Wi-Fi-Geschwindigkeiten benötigt, um ordnungsgemäß zu funktionieren usw.

235
Squonk

Schritt 1: Erstellen Sie eine Klasse AppStatus in Ihrem Projekt (Sie können auch einen anderen Namen vergeben). Dann fügen Sie bitte die folgenden 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 nun zu überprüfen, ob Ihr Gerät über eine Netzwerkverbindung verfügt, fügen Sie einfach diesen Codeausschnitt hinzu, wo immer Sie 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!!!!");    
}
71
Vivek Parihar

Auch ein weiterer wichtiger Hinweis. Sie müssen Android.permission.ACCESS_NETWORK_STATE in Ihrer AndroidManifest.xml einstellen, damit dies funktioniert.

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

Sie müssen nur die Dokumentation zu den Kursen ausreichend lesen und finden alle Antworten, die Sie suchen. Lesen Sie die Dokumentation zu ConnectivityManager . In der Beschreibung erfahren Sie, was zu tun ist.

14

Die Methode getActiveNetworkInfo () von ConnectivityManager gibt eine NetworkInfo-Instanz zurück, die die erste verbundene Netzwerkschnittstelle darstellt, die gefunden werden kann, oder null, wenn keine vorhanden ist, wenn die Schnittstellen verbunden sind. Das Überprüfen, 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 nicht garantiert, dass ein bestimmter Netzwerkdienst verfügbar ist. Netzwerkprobleme, Serverausfälle, niedrige Signalstärke, unverlierbare Portale, Inhaltsfilter und dergleichen können dazu führen, dass Ihre App keinen Server erreicht. Zum Beispiel können Sie nicht sicher sagen, ob Ihre App Twitter erreichen kann, bis Sie eine gültige Antwort vom Twitter-Dienst erhalten.

getActiveNetworkInfo () sollte niemals null geben. Ich weiß nicht, was sie gedacht haben, als sie darauf gekommen sind. Es sollte Ihnen immer ein Objekt geben.

10
axllaruse

Wahrscheinlich habe ich mich gefunden:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
8
dan