Как проверить в данный момент подключение к интернету доступно или нет в андроиде - PullRequest
34 голосов
/ 29 марта 2011

Я хочу также запустить свое приложение в автономном режиме, поэтому мне нужно проверить, доступно ли в настоящее время интернет-соединение или нет.Кто-нибудь может подсказать, как проверить доступность интернета или нет в андроиде?Дайте пример кода.Я попытался с кодом ниже и проверил с помощью эмулятора, но он не работает

public  boolean isInternetConnection() 
{ 

    ConnectivityManager connectivityManager =  (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

Спасибо

Ответы [ 14 ]

61 голосов
/ 29 марта 2011

Это скажет, если вы подключены к сети:

boolean connected = false;
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
            connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
        //we are connected to a network
        connected = true;
    }
    else
        connected = false;

Предупреждение: Если вы подключены к сети Wi-Fi, которая не включает доступ в Интернет или требует браузераАутентификация на основе connected все равно будет истинной.

Вам потребуется это разрешение в манифесте:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
14 голосов
/ 29 марта 2011

Также следует помнить, что иногда пользователь будет подключен к сети Wi-Fi, но для этой сети может потребоваться проверка подлинности на основе браузера.Большинство горячих точек в аэропортах и ​​отелях подобны этим, поэтому ваше приложение может оказаться обманутым, полагая, что у вас есть подключение, и тогда любые выборки URL будут фактически получать страницу входа в горячую точку вместо страницы, которую вы ищете.

В зависимости отВажность выполнения этой проверки, в дополнение к проверке соединения с ConnectivityManager, я бы предложил включить код, чтобы убедиться, что это работающее интернет-соединение, а не просто иллюзия.Вы можете сделать это, пытаясь извлечь известный адрес / ресурс с вашего сайта, например, изображение PNG размером 1x1 или текстовый файл размером 1 байт.

9 голосов
/ 17 октября 2013

Используйте код ниже:

private boolean isNetworkAvailable() {
  ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
  return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

, если isNetworkAvailable () возвращает true, то подключение к Интернету доступно, в противном случае подключение к Интернету недоступно

Здесь необходимо добавитьниже использует-Разрешение в вашем приложении Манифест файл

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
5 голосов
/ 05 августа 2018

Вы можете использовать два метода:

1 - для проверки соединения:

   private boolean isNetworkConnected() {
        ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null;
    }

2 - для проверки интернета:

  public boolean internetIsConnected() {
        try {
            String command = "ping -c 1 google.com";
            return (Runtime.getRuntime().exec(command).waitFor() == 0);
        } catch (Exception e) {
            return false;
        }
    }

Добавить разрешения для манифеста:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2 голосов
/ 26 февраля 2016

Вы можете просто попытаться установить TCP-соединение с удаленным хостом:

public boolean hostAvailable(String host, int port) {
  try (Socket socket = new Socket()) {
    socket.connect(new InetSocketAddress(host, port), 2000);
    return true;
  } catch (IOException e) {
    // Either we have a timeout or unreachable host or failed DNS lookup
    System.out.println(e);
    return false;
  }
}

Тогда:

boolean online = hostAvailable("www.google.com", 80);
2 голосов
/ 21 ноября 2013

используйте следующий код:

public static boolean isNetworkAvaliable(Context ctx) {
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if ((connectivityManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED)
            || (connectivityManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                    .getState() == NetworkInfo.State.CONNECTED)) {
        return true;
    } else {
        return false;
    }
}

помните, что вам нужно вставить в манифест следующую строку:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1 голос
/ 30 июля 2018
  public  boolean isInternetConnection()
    {
        ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
            //we are connected to a network
            return  true;
        }
        else {
            return false;
        }
    }
1 голос
/ 27 июня 2018
public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    } else {
        return false;
    }
}

Google рекомендует этот блок кода.Использовать этот.Потому что устройство может быть не подключено к Интернету, даже если оно подключено к Wi-Fi.Wi-Fi может быть не подключен к Интернету

1 голос
/ 20 апреля 2016

Используйте метод checkConnectivity:

  if (checkConnectivity()){
    //do something 

    }

Метод проверки подключения:

private boolean checkConnectivity() {
        boolean enabled = true;

        ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectivityManager.getActiveNetworkInfo();

        if ((info == null || !info.isConnected() || !info.isAvailable())) {
                            Toast.makeText(getApplicationContext(), "Sin conexión a Internet...", Toast.LENGTH_SHORT).show();
            return false;
        } else {
            return true;
        }

        return false;
    }
0 голосов
/ 10 мая 2019

, если вы хотите проверить интернет-соединение, и оно меняет такое соединение Wi-Fi или данные мобильной связи, вы можете использовать эту библиотеку.

библиотека интернет-соединения

...