web-dev-qa-db-fra.com

Vérifiez la connexion réseau Android

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?

12
amp

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;

    }  
36
Nishant

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)
7
SuN

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;
}
1
Ashish Saini

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:

  1. Aller aux paramètres 
  2. Désactiver le wifi
  3. Allez dans Paramètres-> Utilisation des données
  4. Désactiver Données mobiles

 Settings

 Settings->Data Usage

0
Gene Bo