5

Хочу, чтобы при нажатии на кнопку выводилось сообщение о том, что нет подключения к инету. Написал вот такой вот метод:

protected boolean isOnline() {
    String cs = Context.CONNECTIVITY_SERVICE;
    ConnectivityManager cm = (ConnectivityManager) getSystemService(cs);
    if (cm.getActiveNetworkInfo() == null) {
        return false;
    } else {
        return true;
    }
}

Далее в акивити написал следующее:

if ( !isOnline ){
     Toast.makeText(this, "No internet connection", Toast.LENGTH_LONG).show();        
     MyActivity.this.finish();
}

И почему-то все-равно при дебаге этот кусок проходит насквозь. В чем проблема? Все нужные permissions в манифесте прописал.

2
  • Думаю, просто достаточно в try{///}catch заключить тестовое соединение, и по результатам этой проверки и делать вывод о соединенности. Мне кажется, что CONNECTIVITY_SERVICE недостаточно точно определяет состояние соединения... 27 фев 2013 в 16:21
  • Проверить невозможно.просто включить сайт и если он отказывается работать,значит интернет отсутствует 26 дек 2019 в 0:18

4 ответа 4

13

Работает как часы:

public static boolean hasConnection(final Context context)
{
    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifiInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiInfo != null && wifiInfo.isConnected())
    {
        return true;
    }
    wifiInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    if (wifiInfo != null && wifiInfo.isConnected())
    {
        return true;
    }
    wifiInfo = cm.getActiveNetworkInfo();
    if (wifiInfo != null && wifiInfo.isConnected())
    {
        return true;
    }
    return false;
}
3
  • Вызываю эту функцию внутри OnCreate, а толку все-равно 0...
    – Stas0n
    25 фев 2013 в 9:37
  • обычно я считаю эту проверку лишней, потому что если нету интернета - запрос вернет ошибку и тогда можно будет ее обработать и вывести сообщение, что нету интернета, а так лишняя проверка
    – Gorets
    25 фев 2013 в 10:04
  • @Gorets, да я сам отказался сейчас от использования, но раз уж человек спросил чтоб не ответить 25 фев 2013 в 10:11
13

Я пользуюсь вот таким методом, еще ни разу не подвел

public static boolean isOnline(Context context)
    {
        ConnectivityManager cm =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting())
        {
            return true;
        }
        return false;
    }
1
  • Спасибо, всё работает как часы :)
    – Alex Sh.
    9 авг 2017 в 17:12
3

Спасибо автору, все работает довольно хорошо, но есть нюанс

protected boolean isOnline() {
    String cs = Context.CONNECTIVITY_SERVICE;
    ConnectivityManager cm = (ConnectivityManager)
    getSystemService(cs);
    if (cm.getActiveNetworkInfo() == null) {
    return false;
    } else { retrun true; }

Только тут я немного подкорректировал:

if ( !isOnline ){ 
    Toast.makeText(this, "No internet connection", Toast.LENGTH_LONG).show();
    MyActivity.this.finish();
}

И получилось:

if ( !isOnline() ){
   Toast.makeText(getApplicationContext(),
 "Нет соединения с интернетом!",Toast.LENGTH_LONG).show();
                   return;
                }

Если вставить в обработчик onClick то проверка работает хорошо.

2
  • А как в случае если устройство соединилось с Wi-Fi, но интернет не проплачен или выдернут кабель?
    – Lobs
    28 июл 2017 в 18:03
  • Можно сделать так, пинговать к примеру google.com 30 июл 2017 в 16:51
1

Чет, типа того:

public boolean hasConnection(final Context context){
    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNW = cm.getActiveNetworkInfo();
    if (activeNW != null && activeNW.isConnected())
    {
      return true;
    }
    return false;

}

В основном теле:

if(hasConnection(this)) {
   Toast.makeText(this, "Active networks OK ", Toast.LENGTH_LONG).show();
   getAccountData(TOKEN, token_data_est);
}
else  Toast.makeText(this, "No active networks... ", Toast.LENGTH_LONG).show();

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.