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

Я попытался во многих отношениях проверить подключение к Интернету в моем эмуляторе 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()); } 

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

  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 в файле манифеста

Solutions Collecting From Web of "Интернет-соединение в эмуляторе Android всегда отображает состояние подключения"

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

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

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

Должен быть:

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

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

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

Зачем? Потому что есть больше состояний, чем CONNECTED и DISCONNECTED.

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

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

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

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

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

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