Wykryj, czy na Androidzie jest dostępne połączenie internetowe [duplikat]
Muszę wykryć, czy urządzenie z Androidem jest podłączone do Internetu.Możliwy duplikat:
Jak sprawdzić dostęp do Internetu na Androidzie? InetAddress never timeouts
Klasa NetworkInfo
zapewnia niestatyczną metodę isAvailable()
, która brzmi idealnie.
Problem polega na tym, że:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
Wyrzuca ten błąd:
The constructor NetworkInfo is not visible.
Bezpieczny zakład polega na tym, że istnieje inna klasa, która zwraca obiekt NetworkInfo
. Ale nie wiem które.
- Jak uruchomić powyższy fragment kodu?
- Jak mogłem znaleźć potrzebne mi informacje w dokumentacji online?
- Czy możesz zaproponować lepszy sposób na tego typu wykrywanie?
6 answers
Metoda getActiveNetworkInfo()
z ConnectivityManager
zwraca instancję NetworkInfo
reprezentującą pierwszy podłączony interfejs sieciowy, który może znaleźć lub null
jeśli żaden z interfejsów nie jest podłączony. Sprawdzenie, czy ta metoda zwraca null
powinno wystarczyć, aby stwierdzić, czy połączenie internetowe jest dostępne, czy nie.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Będziesz również potrzebował:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
W manifeście Androida.
Edit:
Zauważ, że posiadanie aktywnego interfejsu sieciowego nie gwarantuje, że dana sieć usługa jest dostępna. Problemy z siecią, przestoje serwera, niski sygnał, portale zamknięte, filtry treści i tym podobne mogą uniemożliwić aplikacji dotarcie do serwera. Na przykład nie możesz być pewien, czy Twoja aplikacja może dotrzeć do Twittera, dopóki nie otrzymasz prawidłowej odpowiedzi z usługi Twitter.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-24 17:01:43
Sprawdzam zarówno Wi-fi, jak i mobilny internet w następujący sposób...
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;
}
Oczywiście można go łatwo zmodyfikować, aby sprawdzić poszczególne typy połączeń, np. jeśli aplikacja potrzebuje potencjalnie wyższych prędkości Wi-fi do poprawnego działania itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-25 16:20:28
Krok 1: Utwórz klasę AppStatus w swoim projekcie(możesz również podać inną nazwę). Następnie wklej podane poniżej linie do kodu:
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;
}
}
Krok 2: teraz, aby sprawdzić, czy urządzenie ma łączność sieciową, po prostu dodaj ten fragment kodu tam, gdzie chcesz to sprawdzić ...
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!!!!");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 13:03:36
Kolejna ważna uwaga. Musisz ustawić android.permission.ACCESS_NETWORK_STATE
W AndroidManifest.xml, aby to działało.
_ Jak mogłem znaleźć potrzebne mi informacje w dokumentacji online?
Wystarczy, że odpowiednio przeczytasz dokumentację klas, a znajdziesz wszystkie odpowiedzi, których szukasz. Sprawdź dokumentację na Connectitymanager . Opis mówi ci, co masz robić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-21 17:07:41
Metoda getActiveNetworkInfo () dla ConnectivityManager zwraca Instancja NetworkInfo reprezentująca pierwszą podłączoną sieć interfejs może znaleźć lub null, jeśli none, jeśli interfejsy są podłączone. Sprawdzenie, czy ta metoda zwraca null powinno wystarczyć, aby stwierdzić, czy dostęp do Internetu jest dostępny.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
Będziesz także potrzebował:
W Twoim manifest Androida.
Edit:
Zauważ, że mając aktywny interfejs sieciowy nie gwarantuje, że dostępna jest konkretna Usługa sieciowa. Problemy z siecią, serwerem przestoje, niski sygnał, portale prywatne, filtry treści i tym podobne wszystko to może uniemożliwić aplikacji dotarcie do serwera. Na przykład ty nie można stwierdzić, czy aplikacja może dotrzeć do Twittera, dopóki nie otrzymasz prawidłowa odpowiedź z serwisu Twitter.
GetActiveNetworkInfo() nie powinno nigdy dawać null. Nie wiem, co sobie myśleli, kiedy na to wpadli. Powinno dać ci obiekt zawsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-05 06:55:36
Prawdopodobnie odnalazłem siebie:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-07 14:28:25