Интернет-соединение в эмуляторе Android всегда отображает состояние подключения - PullRequest
14 голосов
/ 08 апреля 2010

Я пытался разными способами проверить интернет-соединение в моем эмуляторе Android

  ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  

   NetworkInfo info= conMgr.getActiveNetworkInfo();  

         if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         }  
        else{  
            Log.v("NetworkInfo","Not Connected state");  
            Log.v("Reason",info.getReason());  
        } 

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

 if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED  ) {

      Log.v("Congr","Connection Present");

    }
    else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

, но приведенный выше код также отображает «Соединение присутствует», даже когда я отсоединяю интернет-кабели. Помогите найти правильный способ сделать это. У меня есть разрешение ACCESS_NETWORK_STATE и INTERNET в моем файле манифеста

Ответы [ 2 ]

38 голосов
/ 30 мая 2010

1 Отключение интернет-кабелей не имеет значения. Используйте F8 для включения / выключения интернета в эмуляторе

2 В первом коде эта логика неверна:

if(info != null || info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

Должно быть:

if(info != null && info.isConnected()) {  
              Log.v("NetworkInfo","Connected State");  
         } 

Если вы используете || тогда это результат: а) когда информация равна нулю, info.isConnected () завершится сбоем б) когда информация не равна нулю, вы всегда будете отображать состояние соединения

Однако, даже если вы это исправите, код не будет полностью правильным (см. 4 )

3 Во втором коде эта логика неверна:

 else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
        ||  conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {

      Log.v("conMgr"," No Connection");

    } 

должно быть:

 else {

      Log.v("conMgr"," No Connection");

    } 

Почему? Потому что существует больше состояний, чем СОЕДИНЕНО и ОТКЛЮЧЕНО.

Однако, даже если вы это исправите, код не будет полностью правильным (см. 4 )

4 Работает на эмуляторе и устройствах.

connected = (   conMgr.getActiveNetworkInfo() != null &&
            conMgr.getActiveNetworkInfo().isAvailable() &&
            conMgr.getActiveNetworkInfo().isConnected()   )

Обратите внимание на использование isAvailable - без этого isConnected может вернуть TRUE, если WIFI отключен.

Надеюсь, это поможет!

1 голос
/ 25 января 2012

На самом деле, это не говорит вам, подключен ли эмулятор к сети через хост-компьютер.Если вы запускаете его на ПК, а беспроводная связь на ПК выключена, он все равно возвращает значение true, пока эмулятор считает, что он находится в режиме онлайн.Единственный способ точно определить, действительно ли эмулятор подключен к сети, - это попытаться получить страницу и посмотреть, удастся ли ей это сделать.

...