ConnectivityManager для проверки интернет-соединения - PullRequest
1 голос
/ 16 августа 2011

Привет всем, что мне нужно, чтобы проверить, подключено ли мое устройство к Интернету или нет, и поэтому я написал этот класс, который использует ConnectivityManager для проверки:

public boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
        return true;

    } else {
        return false;
    }
}

отлично работает, потому что сейчасМетод находится в классе основного пакета (com.App), но как мне изменить код, чтобы он работал в классе, определенном в com.App.Utility?

Спасибо!

Ответы [ 4 ]

8 голосов
/ 16 августа 2011
package com.app.utility;

  public class Utilities {

    public static final boolean CheckInternetConnection(Context context) {
      ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

      if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
        return true;

      } else {
        return false;
      }
    }
  }
3 голосов
/ 18 марта 2012

Единственная проблема с использованием getActiveNetworkInfo () заключается в том, что существует ряд ситуаций, в которых неправильно определяется подключение. Например, если мобильная сеть отключена на телефоне, но Wi-Fi доступен, то активная сеть все еще может считаться мобильной сетью и, следовательно, возвращать значение false.

Альтернатива:

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE);
    NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI);
    if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnectedOrConnecting() || netInfoWifi.isConnectedOrConnecting())) {
        return true;
    }
    return false;
}
2 голосов
/ 27 января 2014

Thx Alan H!

Условие if может вызвать NPE, когда одно из значений netInfoMob и netInfoWifi равно нулю, а другое - нет.

Этот работает для меня:

netInfoMobile != null && netInfoMobile.isConnectedOrConnecting() ||
netInfoWifi != null && netInfoWifi.isConnectedOrConnecting()
0 голосов
/ 12 марта 2018

Попробуйте, этот код работает.

public static boolean checkNetwork(Context context) {
   context = context;
    ConnectivityManager connManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if ((connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected())
            || (connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connManager
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
            .isConnected())) {
        return true;
    } else {
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...