2012-01-25 4 views
2

Я использую этот код для проверки подключения к Интернету:Использование Context.CONNECTIVITY_SERVICE для проверки подключения к Интернету

private boolean checkInternetConnection() { 
    ConnectivityManager cm = (ConnectivityManager) 
           getSystemService(Context.CONNECTIVITY_SERVICE); 
    // test for connection 
    if (cm.getActiveNetworkInfo() != null 
      && cm.getActiveNetworkInfo().isAvailable() 
      && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

, но даже когда я выключаю Wi-Fi это все еще возвращает истину.

Пробовал как эмулятор, так и устройство с таким же результатом?
Что не так?

+0

Я думаю, что он также проверяет вашу сеть мобильных операторов. –

+0

Так что мне делать? Можете ли вы помочь? – Navdroid

ответ

5

Этот простой код работает в моем случае:

public boolean netConnect(Context ctx) 
{ 
    ConnectivityManager cm; 
    NetworkInfo info = null; 
    try 
    { 
     cm = (ConnectivityManager) 
       ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
     info = cm.getActiveNetworkInfo(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    if (info != null) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Кроме того, это один ..

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

Метод getActiveNetworkInfo() ConnectivityManager возвращает экземпляр NetworkInfo, представляющий первый подключенный сетевой интерфейс, который он может найти, или null, если нет, если интерфейсы подключены. Проверка того, возвращает ли этот метод значение null, достаточно, чтобы узнать, доступно ли подключение к Интернету. – user370305

+0

Это просто сработало Thanx Sir! – Navdroid

+0

Для этого требуются специальные разрешения, такие как ACCESS_WIFI_STATE? –

1

Попробуйте это ....

if((connMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) || (connMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))     
{ 
    return true; 
}else 
{ 
    return false; 
} 
0

Вы можете проверить как Wi-Fi и Интернет следующим образом:

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

+1

Вместо этого используйте networkInfo.getType() == ConnectivityManager.TYPE_WIFI. –

+0

Лучше использовать константы андроида, чем предполагать их пренебрежение ОС/Производитель –

2

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

public boolean isNetworkAvailable(Context contextValue) { 
    Context context = contextValue; 
    ConnectivityManager connectivity = (ConnectivityManager) 
         context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
Смежные вопросы