Интернет-соединение в эмуляторе андроида всегда отображает соединенное состояние

Я пытался во многих отношениях проверить Интернет-соединение в свой эмулятор андроида

  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");

    } 

но вышеупомянутый код также отображает "Соединение, Существующее", даже когда я разъединяю интернет-кабели..Please помогают найти корректный способ сделать, этот.I имеет ACCESS_NETWORK_STATE и ИНТЕРНЕТ-разрешение в моем файле манифеста

14
задан Mark B 8 April 2010 в 13:43
поделиться

1 ответ

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 () выйдет из строя б) если информация не равна нулю, вы всегда будете показывать Connected State

. Однако, даже если вы исправите это, код не будет полностью правильным (см. 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 отключен.

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

38
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: