Dans mon application, que je teste sur l'émulateur, j'utilise le code suivant pour vérifier la connexion réseau (WIFI):
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
Cette méthode retourne toujours true
, même si je désactive la connexion sans fil de mon ordinateur ... Est-ce causé par l'émulateur ou est-ce autre chose?
Si ce n’est pas le bon moyen de vérifier la connexion réseau, comment puis-je le faire?
Il est préférable de (1) passer dans le contexte pour que chaque activité puisse invoquer cette fonction et (2) rendre cette fonction statique:
public boolean isNetworkOnline() {
boolean status=false;
try{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getNetworkInfo(0);
if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
status= true;
}else {
netInfo = cm.getNetworkInfo(1);
if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
status= true;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
return status;
}
Pour que getActiveNetworkInfo () fonctionne, vous devez ajouter ce qui suit au manifeste.
1. uses-permission Android:name="Android.permission.INTERNET"
2. uses-permission
Android:name="Android.permission.ACCESS_NETWORK_STATE"
mieux utiliser netInfo.isConnected () plutôt que netInfo.isConnectedOrConnecting
et essayez aussi
Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
ou
Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)
Nous pouvons vérifier l'état de la connexion Internet en utilisant la fonction ci-dessous. Google Android a mis à jour la fonction de l'API Android pour vérifier l'état du réseau. Désormais, dans la dernière API d'Android, getAllNetworkInfo () est obsolète. mais la fonction getAllNetworks () n'est autorisée que pour Build.VERSION.SDK_INT> = 21.J'ai écrit du code pour tous les cas.
Pour vérifier la connexion Internet, vous pouvez appeler cette fonction.
public static boolean checkInternetConnection(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return false;
} else if(Build.VERSION.SDK_INT >= 21){
Network[] info = connectivity.getAllNetworks();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
return true;
}
}
}
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
return true;
}
}
return false;
}
Dans mon cas, j'ai désactivé le Wifi, mais j'ai oublié de désactiver la connectivité réseau Data/Mobile. Une fois que j'ai fait cela, le code en post original pour ce fil a fonctionné pour moi.
Récapituler: