web-dev-qa-db-fra.com

Quelle est l'alternative à ConnectivityManager.TYPE_WIFI déconseillée dans Android P API 28?

ConnectivityManager.TYPE_WIFI est déconseillé dans Android P API 28. Aussi, NetworkInfo # getType et ConnectivityManager.TYPE_MOBILE sont également obsolètes.

Alors, quelles sont les alternatives pour eux? J'ai compris que nous devons utiliser la méthode de la classe NetworkCapabilities . Cependant, je ne suis pas en mesure de fusionner toutes les choses en un seul endroit, comme comment faire getType () dans la classe NetworkCapabilities et comment ajouter le WIFI et les vérifications de données cellulaires?

Veuillez aider.

9
Amrut

ConnectivityManager.TYPE_WIFI est Obsolète. Vous devez utiliser NetworkCapabilities .

Cela remplace l'ancienne ConnectivityManager.TYPE_MOBILE méthode de sélection du réseau. Plutôt que d'indiquer un besoin de Wi-Fi car une application a besoin d'une bande passante élevée et risque d'obsolescence lorsqu'un nouveau réseau rapide apparaît (comme LTE), l'application doit spécifier qu'elle a besoin d'une bande passante élevée. De même, si une application a besoin d'un réseau non contrôlé pour un transfert en masse, elle peut spécifier qu'au lieu de supposer que toutes les connexions basées sur les cellules sont mesurées et que toutes les connexions basées sur le Wi-Fi ne le sont pas.

Les applications doivent utiliser à la place (NetworkCapabilities.hasTransport(int) ou requestNetwork(NetworkRequest, NetworkCallback) pour demander un réseau approprié. pour les transports pris en charge.

Vous pouvez essayer de cette façon

NetworkAgentInfo networkAgent;
int type = ConnectivityManager.TYPE_NONE;
if (networkAgent.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
     type = ConnectivityManager.TYPE_MOBILE;
} else if (networkAgent.networkCapabilities.hasTransport(
     NetworkCapabilities.TRANSPORT_WIFI)) {
     type = ConnectivityManager.TYPE_WIFI;
}
2
IntelliJ Amiya

Vous pouvez utiliser l'extrait ci-dessous pour vérifier si vous avez une connexion Wifi ou cellulaire:

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M) {
    Network network = connectivityManager.getActiveNetwork();
    NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
    return capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
}
8
Chintan Soni

Utilisez la méthode ci-dessous .. 19/06/2019

public boolean isconnectedToWifi(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivityManager == null) {
        return false;
    }

    if (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.M) {
        Network network = connectivityManager.getActiveNetwork();
        NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
        if (capabilities == null) {
            return false;
        }
        return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
    } else {
        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (networkInfo == null) {
            return false;
        }
        return networkInfo.isConnected();
    }
}
3
Syed Zeeshan