Je ne veux pas que mon utilisateur essaie même de télécharger quelque chose à moins qu'il n'ait une connexion Wi-Fi. Cependant, je peux seulement sembler être en mesure de dire si le Wi-Fi est activé, mais ils pourraient toujours avoir une connexion 3G.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
Cependant, l'État n'est pas ce à quoi je m'attendrais. Même si le Wi-Fi est connecté, je reçois OBTAINING_IPADDR
l'état.
la source
android.permission.ACCESS_NETWORK_STATE
à votre AndroidManifest.xml pour que cela fonctionne.connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Étant donné que la méthode NetworkInfo.isConnected () est désormais déconseillée dans l' API-23 , voici une méthode qui détecte si l'adaptateur Wi-Fi est activé et également connecté à un point d'accès à l'aide de WifiManager à la place:
la source
NetworkInfo.isConnected()
ne me semble pas obsolète.android.permission.ACCESS_WIFI_STATE
J'utilise simplement ce qui suit:
Qui renverra l'un de ces états au moment où vous appelez getSupplicantState ();
la source
J'utilise ceci dans mes applications pour vérifier si le réseau actif est Wi-Fi:
la source
active
réseau (celui qui sera utilisé pour le téléchargement) est le WiFiNetworkInfo#isConnected
déconseilléeJ'ai jeté un coup d'œil à quelques questions comme celle-ci et j'ai trouvé ceci:
J'utilise if pour ma vérification de licence dans Root Toolbox PRO, et cela semble très bien fonctionner.
la source
getNetworkInfo()
cela retournera une valeur nulle si le réseau n'existe pas. Donc, si l'appareil n'a pas de connexion mobile, cela générera une erreur. Dans la plupart des cas, TYPE_ETHERNET provoquera une valeur nulle dans ce cas, car la plupart des appareils n'auront pas de connexion Ethernet.Bien que la réponse de Jason soit correcte, getNetWorkInfo (int) est aujourd'hui une méthode déconseillée. Donc, la fonction suivante serait une bonne alternative:
la source
En utilisant
WifiManager
vous pouvez faire:La méthode getNeworkId renvoie -1 uniquement lorsqu'il n'est pas connecté à un réseau;
la source
la source
boolean isConnectedOrConnecting ()
indique si la connectivité réseau existe ou est en cours d'établissement. C'est bon pour les applications qui ont besoin de faire autre chose que le réseau pour lire ou écrire des données. Pour ces derniers, appelezisConnected()
plutôt, ce qui garantit que le réseau est pleinement utilisable.Le code suivant (dans Kotlin) fonctionne de l'API 21 jusqu'à au moins la version actuelle de l'API (API 29). La fonction getWifiState () renvoie l'une des 3 valeurs possibles pour l'état du réseau WiFi: Disable, EnabledNotConnected et Connected qui ont été définies dans une classe enum. Cela permet de prendre des décisions plus granulaires comme informer l'utilisateur d'activer le WiFi ou, s'il est déjà activé, de se connecter à l'un des réseaux disponibles. Mais si tout ce qui est nécessaire est un booléen indiquant si l'interface WiFi est connectée à un réseau, alors l'autre fonction isWifiConnected () vous le donnera. Il utilise le précédent et compare le résultat à Connecté.
Il s'inspire de certaines des réponses précédentes mais essaie de résoudre les problèmes introduits par l'évolution des API Android ou la disponibilité lentement croissante d'IP V6. L'astuce consistait à utiliser:
au lieu de:
Selon la documentation: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid, il retournera null s'il n'est pas connecté à un réseau. Et même si nous n'avons pas la permission d'obtenir la valeur réelle, cela retournera toujours quelque chose d'autre que null si nous sommes connectés.
Gardez également à l'esprit les points suivants:
Dans le manifeste, n'oubliez pas d'ajouter:
Le code proposé est:
la source
La
NetworkInfo
classe est obsolète à partir du niveau 29 de l'API, ainsi que les méthodes d'accès associées telles queConnectivityManager#getNetworkInfo()
etConnectivityManager#getActiveNetworkInfo()
.La documentation suggère désormais aux utilisateurs d'utiliser l'
ConnectivityManager.NetworkCallback
API pour la surveillance des rappels asynchronisés, ou d'utiliserConnectivityManager#getNetworkCapabilities
ouConnectivityManager#getLinkProperties
pour un accès synchronisé aux informations réseauPour vérifier si le WiFi est connecté, voici le code que j'utilise:
Kotlin:
Java:
N'oubliez pas d'ajouter également l'autorisation
ACCESS_NETWORK_STATE
à votre fichier manifeste.la source
Essayez cette méthode.
Cette méthode vous aidera à trouver une connexion Internet disponible ou non.
la source
Cela fonctionne pour moi:
Et ajoutez cette autorisation:
la source
De nombreuses réponses utilisent du code obsolète ou du code disponible sur les versions de l'API higer. Maintenant j'utilise quelque chose comme ça
la source
Voici ce que j'utilise comme méthode utilitaire dans mes applications:
la source
Dans la nouvelle version Android
et ajouter la prémission aussi
la source
connManager.getAllNetworks()
nécessite l'API niveau 21.Similaire à la réponse de @Jason Knight, mais à la manière de Kotlin:
la source
ConnectivityManager.TYPE_WIFI
est déconseilléC'est une solution plus simple. Voir la question de dépassement de la pile Vérification du Wi-Fi activé ou non sur Android .
PS N'oubliez pas d'ajouter le code au fichier manifest.xml pour autoriser l'autorisation. Comme indiqué ci-dessous.
la source
Essayer
Cela renvoie 0 jusqu'à ce que l'appareil dispose d'une connexion utilisable (sur ma machine, un Samsung SM-T280, Android 5.1.1).
la source
Vous pouvez activer le WIFI s'il n'est pas activé comme suit 1. vérifiez l'état WIFI comme répondu par @Jason Knight 2. s'il n'est pas activé, activez-le n'oubliez pas d'ajouter la permission WIFI dans le fichier manifeste
Votre classe Java devrait être comme ça
}
la source
Ajoutez ceci pour JAVA:
dans le fichier manifeste, ajoutez les autorisations suivantes:
la source
Un peu une vieille question mais c'est ce que j'utilise. nécessite une API minimale de niveau 21 prend également en compte les API Networkinfo obsolètes.
la source