Какая альтернатива ConnectivityManager.TYPE_WIFI устарела в Android P API 28? - PullRequest
0 голосов
/ 15 октября 2018

ConnectivityManager.TYPE_WIFI устарела в Android P API 28. Кроме того, NetworkInfo # getType и ConnectivityManager.TYPE_MOBILE также устарели.

Итак, какие у них есть альтернативы?Я понял, что мы должны использовать метод из класса NetworkCapabilities .Однако я не могу объединить все вещи в одном месте, например, как сделать getType () в классе NetworkCapabilities и как добавить к нему проверки WIFI и данных сотовой связи?

Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете использовать приведенный ниже фрагмент кода, чтобы проверить, есть ли у вас Wi-Fi или сотовая связь:

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));
}
0 голосов
/ 19 июня 2019

Используйте метод ниже. 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();
    }
}
0 голосов
/ 15 октября 2018

ConnectivityManager.TYPE_WIFI равно устарело .Вы должны использовать NetworkCapabilities.

Этот метод заменяет старый ConnectivityManager.TYPE_MOBILE метод выбора сети.Вместо того, чтобы указывать на потребность в Wi-Fi, поскольку приложению требуется высокая пропускная способность и существует риск устаревания при появлении новой быстрой сети (например, LTE), приложение должно указать, что ей требуется высокая пропускная способность.Точно так же, если приложению требуется неизмеренная сеть для массовой передачи, оно может указать, что вместо того, чтобы предполагать, что все соединения на основе сотовой связи измерены, а все соединения на основе Wi-Fi - нет.

Приложения должны вместо этого использовать NetworkCapabilities.hasTransport(int) или requestNetwork(NetworkRequest, NetworkCallback) для запроса соответствующей сети.для поддерживаемых транспортов.

Вы можете попробовать этот способ

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;
}
...