Подтвердить что ты не робот

Проверьте подключение к сети

В моем приложении, которое я тестирую на эмуляторе, я использую следующий код для проверки сетевого подключения (WIFI):

    public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

Этот метод возвращает всегда true, даже если я отключу беспроводное соединение моего компьютера... Это вызвано эмулятором или это что-то еще?

Если это неверный способ проверить подключение к сети, как я могу это сделать?

4b9b3361

Ответ 1

Лучше (1) передать контекст, чтобы каждое действие могло вызывать эти функции, и (2) Сделать эту функцию static:

 public boolean isNetworkOnline() {
    boolean status=false;
    try{
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getNetworkInfo(0);
        if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
            status= true;
        }else {
            netInfo = cm.getNetworkInfo(1);
            if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
                status= true;
        }
    }catch(Exception e){
        e.printStackTrace();  
        return false;
    }
    return status;

    }  

Ответ 2

Чтобы получить getActiveNetworkInfo() для работы, вам нужно добавить в манифест следующее.

1. uses-permission android:name="android.permission.INTERNET"
 2. uses-permission
    android:name="android.permission.ACCESS_NETWORK_STATE"

лучше использовать netInfo.isConnected(), а не netInfo.isConnectedOrConnecting

а также попробуйте это

Context.getSystemService(Context.CONNECTIVITY_SERVICE).getNetworkInfo(ConnectivityManager.TYPE_MOBILE)

или

Context.getSystemService(Context.CONNECTIVITY_SERVICE).requestRouteToHost(TYPE_WIFI, int hostAddress)

Ответ 3

В моем случае я отключил Wi-Fi, но забыл об отключении подключения к сети Data/Mobile. Как только я это сделал, код в исходном сообщении для этого потока работал у меня.

Повторить:

  • Перейдите в Настройки
  • Отключить Wi-Fi
  • Перейдите в Настройки- > Использование данных
  • Отключить Мобильные данные

Настройки

Настройки-> Использование данных

Ответ 4

Мы можем проверить состояние подключения к Интернету, используя функцию ниже. Google Android обновил функцию Android API, чтобы проверить состояние сети. Теперь в последних API Android, getAllNetworkInfo() устарел. но функция getAllNetworks() разрешена только для Build.VERSION.SDK_INT >= 21. У меня есть код для всех случаев.

Чтобы проверить подключение к Интернету, вы можете вызвать эту функцию.

public static boolean checkInternetConnection(Context context) {
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {
        return false;
    } else if(Build.VERSION.SDK_INT >= 21){
        Network[] info = connectivity.getAllNetworks();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i] != null && connectivity.getNetworkInfo(info[i]).isConnected()) {
                    return true;
                }
            }
        }
    } else {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
        final NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
            return true;
        }
    }

    return false;
}

Ответ 5

Вот как я собрал это вместе в проекте:

Файл манифеста:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Статическая функция:

public static boolean isNwConnected(Context context) {
    if (context == null) {
        return true;
    }
    ConnectivityManager connectivityManager = 
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nwInfo = connectivityManager.getActiveNetworkInfo();
    if (nwInfo != null && nwInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}