Détecter s'il existe une connexion Internet disponible sur Android [dupliquer]

possibilité de duplication:

Comment vérifier l'accès à Internet sur Android? InetAddress jamais délais d'attente

je dois détecter si L'appareil Android est connecté à Internet.

la classe NetworkInfo fournit une méthode non statique isAvailable() qui sonne parfait.

le problème est que:

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

lance cette erreur:

The constructor NetworkInfo is not visible.

pari Sûr est qu'il existe une autre classe qui retourne un NetworkInfo objet. Mais je ne sais pas qui.

  1. Comment faire fonctionner l'extrait de code ci-dessus?
  2. comment aurais-je pu me trouver l'information dont j'avais besoin dans la documentation en ligne?
  3. pouvez-vous suggérer une meilleure méthode pour ce type de détection?
587
demandé sur Community 2010-11-21 19:35:05

6 réponses

la méthode getActiveNetworkInfo() de ConnectivityManager renvoie une instance NetworkInfo représentant la première interface réseau connectée qu'elle peut trouver ou null si aucune des interfaces n'est connectée. Vérifier si cette méthode retourne null devrait suffire pour savoir si une connexion internet est disponible ou non.

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

vous aurez aussi besoin de:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

dans votre manifeste androïde.

Modifier:

notez qu'avoir une interface réseau active ne garantit pas qu'un service réseau particulier est disponible. Les problèmes de réseau, le temps d'arrêt du serveur, le signal faible, les portails captifs, les filtres de contenu et autres peuvent tous empêcher votre application d'atteindre un serveur. Par exemple, vous ne pouvez pas dire avec certitude si votre application peut atteindre Twitter jusqu'à ce que vous recevez une réponse valide du service Twitter.

1265
répondu Alex Jasmin 2015-08-24 17:01:43

je vérifie pour Wi-fi et Internet Mobile comme suit...

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

évidemment, il pourrait facilement être modifié pour vérifier les types de connexion spécifiques, par exemple, si votre application a besoin des vitesses potentiellement plus élevées de Wi-fi pour fonctionner correctement, etc.

217
répondu Squonk 2011-11-25 16:20:28

Étape 1: créez une classe AppStatus dans votre projet(vous pouvez donner n'importe quel autre nom aussi). Veuillez ensuite coller les lignes ci-dessous dans votre code:

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

Étape 2: Maintenant pour vérifier si votre appareil a une connectivité réseau, il suffit d'ajouter cet extrait de code où que vous vouliez vérifier ...

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!!!!");    
}
64
répondu Vivek Parihar 2018-04-04 13:03:36

aussi une autre note importante. Vous devez mettre android.permission.ACCESS_NETWORK_STATE dans votre AndroidManifest.xml pour que cela fonctionne.

_ comment aurais-je pu me trouver l'information dont j'avais besoin dans la documentation en ligne?

Vous n'avez qu'à lire la documentation des classes correctement et vous trouverez toutes les réponses que vous cherchez. Consultez la documentation sur ConnectivityManager . Le description vous dit quoi faire.

14
répondu Octavian Damiean 2010-11-21 17:07:41

la méthode getActiveNetworkInfo() de ConnectivityManager retourne un Instance NetworkInfo représentant le premier réseau connecté interface il peut trouver ou nul si aucun si les interfaces sont connectés. Vérifier si cette méthode retourne null devrait être suffisant pour dire si un la connexion internet est disponible.

private boolean isNetworkAvailable() {
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
     return activeNetworkInfo != null; 
}

vous aurez aussi besoin de:

dans votre manifeste android.

Edit:

notez qu'avoir une interface réseau active ne garantit pas qu'un un service en réseau particulier est disponible. Problèmes de réseaux, serveur temps d'arrêt, faible signal, portails captifs, filtres de contenu et similaires tous peuvent empêcher votre application d'atteindre un serveur. Par exemple, vous Je ne peux pas dire avec certitude si votre application peut atteindre Twitter jusqu'à ce que vous recevez un réponse valide du service Twitter.

getActiveNetworkInfo() ne devraient pas ne jamais donner la valeur null. Je ne sais pas à quoi ils pensaient quand ils ont inventé ça. Il devrait vous donner un objet toujours.

10
répondu axllaruse 2013-08-05 06:55:36

probablement je me suis trouvé:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();
7
répondu dan 2016-09-07 14:28:25