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.
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.
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.
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!!!!");
}
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.
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.
Wahrscheinlich habe ich mich gefunden:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();