Intereting Posts
Java.lang.ClassCastException: org.json.simple.JSONArray нельзя передать в org.json.JSONArray Android + eclipse + maven + actionbarsherlock Void android.support.v4.app.Fragment.setMenuVisibility (boolean) 'для ссылки на нулевой объект Добавить поля для разделителя в RecyclerView Предотвращение отклонения диалога при повороте экрана в Android Как связать файл автоматических настроек с пользовательскими настройками в android Измените данные пакета намерений до того, как активность будет восстановлена ​​после изменения ориентации NoClassDefFoundError в вложенной банке (Android) Intent FLAG_GRANT_READ_URI_PERMISSION Использование FileProvider в Gingerbread Как передать карту <String, String> параметры или объект в запрос POST через Retrofit? Как исправить ошибку Android BLE SCAN_FAILED_APPLICATION_REGISTRATION_FAILED? Как получить окно ActivityToken без просмотра? Ionic 2: Как я могу получить консольные сообщения с устройства Android Студия Android не изменит строку Всегда ли безопасно использовать контекст для активности в представлении?

Интернет-соединение в эмуляторе 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, как только эмулятор будет считать его в онлайн-состоянии. Единственный способ, которым я смог точно определить, действительно ли эмулятор в сети, – попытаться извлечь страницу и посмотреть, удастся ли ей это сделать или нет.