Question Détecter s'il y a une connexion Internet disponible sur Android [dupliquer]


Dupliquer possible:
Comment vérifier l'accès à Internet sur Android? InetAddress ne dépasse jamais 

Je dois détecter si l'appareil Android est connecté à Internet.

le NetworkInfo classe fournit une méthode non statique isAvailable() ça a l'air parfait.

Le problème est que:

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

lève cette erreur:

The constructor NetworkInfo is not visible.

Pari sûr est il y a une autre classe qui renvoie un NetworkInfo objet. Mais je ne sais pas lequel.

  1. Comment faire fonctionner l'extrait de code ci-dessus?
  2. Comment aurais-je pu trouver les informations dont j'avais besoin dans la documentation en ligne?
  3. Pouvez-vous suggérer un meilleur moyen pour ce type de détection?

577
2017-11-21 16:35


origine


Réponses:


le getActiveNetworkInfo() méthode de ConnectivityManager retourne un NetworkInfo instance représentant la première interface réseau connecté, il peut trouver ou null si aucune des interfaces n'est connectée. Vérifier si cette méthode retourne null devrait suffire à dire 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 également besoin de:

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

dans votre manifeste android.

Modifier:

Notez que l'existence d'une interface réseau active ne garantit pas qu'un service en réseau particulier est disponible. Les problèmes de réseau, les temps d'arrêt du serveur, les signaux faibles, les portails captifs, les filtres de contenu et autres peuvent 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 receviez une réponse valide du service Twitter.


1247
2017-11-21 16:53



Je vérifie à la fois 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 des 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.


213
2017-11-21 18:12



Étape 1: Créez un AppStatus de classe dans votre projet (vous pouvez également donner un autre nom). Ensuite, collez 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 dispose d'une connectivité réseau, il suffit d'ajouter cet extrait de code où vous voulez 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!!!!");    
}

63
2017-08-08 19:30



Aussi une autre note importante. Vous devez définir android.permission.ACCESS_NETWORK_STATE dans votre AndroidManifest.xml pour que cela fonctionne.

_ Comment aurais-je pu trouver les informations dont j'avais besoin dans la documentation en ligne?

Vous avez juste à lire la documentation les classes assez correctement et vous trouverez toutes les réponses que vous recherchez. Consultez la documentation sur ConnectivityManager. La description vous indique quoi faire.


14
2017-11-21 17:01



La méthode getActiveNetworkInfo () de ConnectivityManager renvoie un   Instance NetworkInfo représentant le premier réseau connecté   interface il peut trouver ou null si aucun si les interfaces sont connectées.   Vérifier si cette méthode renvoie null devrait suffire à 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 également besoin de:

 dans ton   manifeste android.

Modifier:

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

getActiveNetworkInfo () ne doit jamais donner null. Je ne sais pas ce qu'ils pensaient quand ils ont trouvé ça. Cela devrait vous donner un objet toujours.


10
2017-08-20 14:03



Probablement je me suis trouvé:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();

7
2017-11-21 16:57