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:
Les appelants doivent passer à la vérification de NetworkCapabilities # hasTransport à la place avec l'une des constantes NetworkCapabilities # TRANSPORT *
Pour utiliser NetworkCapabilities
, vous devez transmettre une Network
instance à la getNetworkCapabilities()
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:
public static boolean isNetworkConnected() {
final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
if (Build.VERSION.SDK_INT < 23) {
final NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
}
} else {
final Network n = cm.getActiveNetwork();
if (n != null) {
final NetworkCapabilities nc = cm.getNetworkCapabilities(n);
return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
}
}
}
return false;
}
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 êtreTRANSPORT_VPN
, vous voudrez peut-être le vérifier également.
N'oubliez pas d'ajouter l'autorisation suivante à votre fichier AndroidManifest:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />