J'ai besoin de savoir si mon appareil est connecté à Internet ou non. J'ai trouvé de nombreuses réponses comme:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(Pris à partir de Détecter si une connexion Internet est disponible sur Android .)
Mais ce n'est pas correct, par exemple si je suis connecté à un réseau sans fil qui n'a pas d'accès Internet , cette méthode retournera vrai… Y a-t-il un moyen de savoir si l'appareil a une connexion Internet et non s'il est uniquement connecté de quelque chose?
android
internet-connection
android-internet
Buda Gavril
la source
la source
isNetworkConnected
bloc fonctionnel contient du code obsolète pour tousBuild.VERSION.SDK_INT >= Build.VERSION_CODES.M
. Une discussion plus approfondie sur le sujet et comment y remédier peut être trouvée ici stackoverflow.com/questions/53532406/…Réponses:
Vous avez raison. Le code que vous avez fourni vérifie uniquement s'il existe une connexion réseau. La meilleure façon de vérifier s'il existe une connexion Internet active est d'essayer de vous connecter à un serveur connu via http.
Bien sûr, vous pouvez remplacer l'
http://www.google.com
URL de tout autre serveur auquel vous souhaitez vous connecter, ou d'un serveur dont vous savez qu'il a une bonne disponibilité.Comme Tony Cho l'a également souligné dans ce commentaire ci - dessous , assurez-vous de ne pas exécuter ce code sur le thread principal, sinon vous obtiendrez une exception NetworkOnMainThread (sous Android 3.0 ou version ultérieure). Utilisez plutôt une AsyncTask ou Runnable.
Si vous souhaitez utiliser google.com, vous devriez regarder la modification de Jeshurun. Dans sa réponse, il a modifié mon code et l'a rendu un peu plus efficace. Si vous vous connectez à
puis vérifiez le code de réponse pour 204
alors vous n'avez pas besoin de récupérer la page d'accueil entière de Google en premier.
la source
ConnectivityManager
ne l'exige pas). Sinon, sur les appareils Android 4.x +, vous obtiendrez uneNetworkOnMainThread
exception.J'ai légèrement modifié la réponse de THelper, pour utiliser un hack connu qu'Android utilise déjà pour vérifier si le réseau WiFi connecté a accès à Internet. C'est beaucoup plus efficace que de saisir toute la page d'accueil de Google. Voir ici et ici pour plus d'informations.
la source
renvoie true si Internet est réellement disponible
Assurez-vous d'avoir ces deux autorisations
si http ne fonctionne pas, c'est à cause de la nouvelle sécurité Android, ils n'autorisent pas la communication en texte brut maintenant. pour l'instant juste pour le contourner.
la source
Si vous ciblez Lollipop ou une version supérieure, il est possible d'utiliser la nouvelle classe NetworkCapabilities, c'est-à-dire:
la source
connectivityManager.getActiveNetwork();
nécessite l'API lvl23 qui est Marshmallow et non Lollipop.capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
semblait faire l'affaire pour moi!Vous n'avez pas nécessairement besoin d'établir une connexion HTTP complète. Vous pouvez simplement essayer d'ouvrir une connexion TCP à un hôte connu et si cela réussit, vous disposez d'une connectivité Internet.
Ensuite, vérifiez simplement avec:
la source
AsyncTask
Sur la base des réponses acceptées, j'ai construit cette classe avec un écouteur afin que vous puissiez l'utiliser dans le fil principal:
Premièrement : la classe InterntCheck qui vérifie la connexion Internet en arrière-plan, puis appelle une méthode d'écoute avec le résultat.
Deuxièmement : instanciez une instance de la classe dans le thread principal et attendez la réponse (si vous avez déjà travaillé avec Firebase api pour Android, cela devrait vous être familier!).
Maintenant, dans la méthode onComplete, vous saurez si l'appareil est connecté à Internet ou non.
la source
essaye celui-là
la source
Vous pouvez le faire en utilisant l'
ConnectivityManager
API pour Android. Il vous permet de vérifier si vous êtes connecté à Internet et le type de connexion Internet auquel vous êtes connecté. Fondamentalement, mesuré ou non.Pour vérifier la connexion Internet.
Lien de documentation: https://developer.android.com/training/monitoring-device-state/connectivity-status-type
la source
J'espère que le code ci-dessus vous aidera, assurez-vous également que vous avez l'autorisation Internet dans votre application.
la source
La dernière façon de le faire à partir de la documentation consiste à utiliser le
ConnectivityManager
pour interroger le réseau actif et déterminer s'il dispose d'une connectivité Internet.Ajoutez ces deux autorisations à votre fichier AndroidManifest.xml:
la source
Vérifiez le type de wifi dans le gestionnaire de connectivité:
La documentation Android décrit «TYPE_WIFI» comme «une connexion de données WIFI. Les appareils peuvent en prendre en charge plusieurs. »
la source
Une belle solution pour vérifier si le réseau actif dispose d'une connexion Internet:
la source
Vous pouvez utiliser ConnectivityManager.
Vérifiez ceci et cela
la source
Utilisez la classe suivante , mise à jour au dernier niveau d'API: 29.
la source