En utilisant compileSdkVersion 23 , mais en essayant de prendre en charge aussi loin que 9.
getNetworkInfo(int)
était obsolète dans 23. La suggestion était d'utiliser getAllNetworks()
etgetNetworkInfo(Network)
place. Cependant, les deux nécessitent un minimum d'API 21.
Y a-t-il une classe que nous pouvons utiliser dans le package de support qui peut vous aider?
Je sais qu'une solution a été proposée auparavant , mais le défi de mes exigences minimales d'API de 9 pose un problème.
Réponses:
Vous pouvez utiliser:
Ou dans un boîtier de commutation
la source
activeNetwork.getType()
est obsolète etConnectivityManager.TYPE_WIFI
obsolètecm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
Quant à octobre 2018, la réponse acceptée est obsolète.
getType()
, et les types eux-mêmes, sont désormais obsolètes au niveau de l'API 28. De Javadoc:Pour utiliser
NetworkCapabilities
, vous devez transmettre uneNetwork
instance à lagetNetworkCapabilities()
méthode. Pour obtenir cette instance, vous devez appelergetActiveNetwork()
ce qui a été ajouté au niveau d'API 23.Je pense donc que pour l'instant, la bonne façon de vérifier en toute sécurité si vous êtes connecté au Wi-Fi ou au réseau cellulaire est:
Vous pouvez également rechercher d'autres types de
TRANSPORT
, que vous pouvez trouver ici .Remarque importante: si vous êtes connecté au Wi-Fi et à un VPN, votre état actuel pourrait être
TRANSPORT_VPN
, vous voudrez peut-être le vérifier également.N'oubliez pas d'ajouter l'autorisation suivante à votre fichier AndroidManifest:
la source
NetworkInfo
est amorti, vous ne pouvez plus utiliserNetWorkInfo
, alors en quoi cela constitue-t-il une alternative?Mise à jour de février 2020:
La réponse acceptée est à nouveau obsolète dans
28 (Android P)
, mais sa méthode de remplacement ne fonctionne que sur23 (Android M)
. Pour prendre en charge les appareils plus anciens, j'ai écrit une fonction d'assistance dans.Comment utiliser:
Il renvoie un
int
, vous pouvez le changerenum
dans votre code:Vous pouvez copier la version Kotlin ou Java de la fonction d'assistance.
Kotlin:
Java:
la source
No Internet
,Cellular
etWi-Fi
. Si vous ne vous souciez pas du type de connexion, n'hésitez pas à modifier le code pour l'adapter à votre application.Boolean
classe wrapper au lieu deboolean
laquelle est primitive. Dans la déclaration if, vous devrez ajouter un chèquenull
. Et si demain un autre nouveau mode de transport dans NetworkCapabilities est introduit ... donc utiliser un entier pour le branchement aidera et vous pouvez également opter pour des cas de commutation.Réponse mise à jour (19: 07: 2018):
Cette méthode vous aidera à vérifier si la connexion Internet est disponible.
Ancienne réponse:
Pour une meilleure pratique de réutilisation du code, improvisez la réponse Cheese Bread.
Le code peut être placé dans la classe Util et peut être utilisé pour vérifier si le téléphone est connecté à Internet via Wifi ou Internet mobile à partir de n'importe quelle partie de votre application.
la source
activeNetwork.isConnectedOrConnecting()
est maintenant obsolèteLa réponse acceptée est obsolète dans la version 28, voici donc la solution que j'utilise dans mon projet.
la source
Réponse Février 2019
Pour vérifier si vous êtes en ligne:
Pour obtenir le type de connectivité Internet avant / après Android M
Tous les cas nécessitent une autorisation pour accéder à l'état du réseau
Comme il
NetworkInfo
est obsolète et à partir de l'API 29, nous devons désormais l'utiliserConnectivityManager.NetworkCallback
avec son changement d'état du réseauonAvailable()
etonLost()
rappels.Usage:
Caractéristiques
LifecycleObserver
pour éviter les fuites de mémoire en effectuant un certain nettoyage dansonDestroy()
méthode.BoradcastReceiver
etNetworkInfo
, et utiliseConnectivityManager.NetworkCallback
pour l'API 21 et supérieur.android.permission.ACCESS_NETWORK_STATE
; mais vous devez l'inclure si vous comptez utiliser la classe utilitaire.Capacités
la source
onLost
sera appelé.onLost
ne signifie pas que l'appareil a perdu la connexion Internet, mais qu'un réseau a perdu la connexion.Il est bon de vérifier si votre réseau est connecté à Internet:
la source
NetworkCapabilities.NET_CAPABILITY_VALIDATED
.Version Kotlin:
la source
Comme le suggère Cheese Bread , utilisez getActiveNetworkInfo ()
appelez maintenant la méthode, pour une utilisation en toute sécurité, essayez catch
Et n'oubliez pas d'ajouter:
la source
getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
Afin d'être du bon côté, je suggérerais d'utiliser également la méthode
La méthode entière pourrait être comme ci-dessous:
la source
activeNetwork.getType()
est obsolète etConnectivityManager.TYPE_WIFI
obsolèteVoici comment je vérifie si le réseau actuel utilise le cellulaire ou non sur les dernières versions d'Android:
la source
(Presque) Toutes les réponses sont obsolètes dans Android P, voici donc la
C#
solution ( qui est facile à suivre pour les développeurs Java )La clé ici est
Android.Net.TransportType
la source
Il se peut que nous devions vérifier la connectivité Internet plusieurs fois. Donc, ce sera plus facile pour nous si nous écrivons le bloc de code dans une méthode d'extension de
Context
. Voici mes extensions d'aide pourContext
etFragment
.Vérification de la connexion Internet
Autres extensions
la source
vérifier si Internet est disponible
la source
ConnectivitéManager.getActiveNetwork () ne se trouve pas dans ci-dessous android M (API 28). networkInfo.getState () est obsolète au-dessus d'android L.
Donc, la réponse finale est:
la source
De nombreuses réponses utilisent encore getNetworkType inférieur à 23, ce qui est obsolète; utilisez le code ci-dessous pour vérifier si l'appareil dispose d'une connexion Internet.
..
Et n'oubliez pas d'ajouter cette ligne dans Manifest
la source
Étant donné que les réponses publiées vous permettent uniquement d'interroger le réseau actif, voici comment obtenir
NetworkInfo
pour n'importe quel réseau, pas seulement le réseau actif (par exemple, le réseau Wifi) (désolé, code Kotlin à l'avance)Cela nécessite l'API 21 ou une version ultérieure et l'autorisation
android.permission.ACCESS_NETWORK_STATE
la source
cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
NetManager que vous pouvez utiliser pour vérifier la connexion Internet sur Android avec Kotlin
Si vous utilisez minSdkVersion> = 23
Si vous utilisez minSdkVersion <23
la source
https://www.agnosticdev.com/content/how-detect-network-connectivity-android
veuillez suivre ce tutoriel, il devrait aider tous ceux qui recherchent des réponses.
notez que networkInfo est obsolète, remplacez-le par isNetworkReacheable () par la réponse @vidha ci-dessous en passant getApplicationContext () comme paramètre
la source
la source
Cela fonctionne pour moi à Kotlin. De nombreuses API sont obsolètes dans la classe Network Manager, donc la réponse ci-dessous couvre toute la prise en charge des API.
Vous ajouterez également ci-dessous
la source
Le code ci-dessous fonctionne sur toutes les API. (Kotlin)
Cependant, getActiveNetworkInfo () est obsolète uniquement dans l'API 29 et fonctionne sur toutes les API, nous pouvons donc l'utiliser dans toutes les API inférieures à 29
la source
Quelque chose comme ça:
Et dans le corps principal du programme:
la source
Cela fonctionnera également dans Android 10. Il retournera vrai s'il est connecté à Internet, sinon il retournera faux.
la source