Подтвердить что ты не робот

Как имитировать общую потерю сети в Android Emulator

Я пытаюсь написать приложение, которое необходимо знать, когда нет доступного сетевого подключения к сети. Я использую широковещательное событие android.net.conn.CONNECTIVITY_CHANGE вместе с ConnectivityManager, чтобы реагировать на изменения состояния для достижения этого, но у меня возникают проблемы с тестированием моей настройки в эмуляторе.

Я попробовал оба режима полета и нажал F8, чтобы отключить "Сотовая сеть", но даже если оба из них задействованы, приложение все еще "видит" базовую сеть.

Кто-нибудь смог найти способ имитации полного отсутствия доступа к сети?

4b9b3361

Ответ 1

Я испытал, что после нажатия F8 значок в строке состояния показывает, что нет возможности подключения, но если вы попытаетесь просмотреть его, это будет работать. Может быть, это как-то связано с этой открытой ошибкой: ошибка 3838

Ответ 2

В Eclipse есть DDMS Perspective, где вы можете манипулировать скоростью и доступностью соединения (на вкладке "Управление эмулятором" ). Если это не сработает для вас, я могу предложить включить сеть вашей ОС или даже отключить кабель:)

Ответ 3

К сожалению, я хотел опубликовать этот ответ (http://stackoverflow.com/questions/3400109/simulate-wireless-network-in-emulator/6078544#6078544) здесь.

Вот решение, которое я придумал для моделирования общей потери сетевого соединения на эмуляторе:

Напишите следующий script и назовите его "nonetwork.sh"

netcfg eth0 down
sleep 10
netcfg eth0 up
netcfg eth0 dhcp

Загрузите следующую эмуляцию script с помощью этой команды:

adb push nonetwork.sh /data/local/nonetwork.sh

Измените разрешения

adb shell chmod 700 /data/local/nonetwork.sh

Запустить его

adb shell /data/local/nonetwork.sh

Пока сеть не работает на устройстве, вы также потеряете доступ к adb, но как только соединение будет восстановлено, он снова будет работать. Надеюсь, это поможет.

Ответ 4

isAvailable - без этого isConnected может вернуться TRUE, когда WIFI отключен. Обратитесь к приведенному ниже коду и этому URL-адресу для получения дополнительной информации http://developer.android.com/guide/developing/tools/emulator.html

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

      if (
connMgr.getActiveNetworkInfo() != null &&
            conMgr.getActiveNetworkInfo().isAvailable() &&

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

          //notify user you are online

      }       else if (

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { //notify user you are not online

          Toast.makeText(getBaseContext(),"Please

    Check Your Internet Connection and Try Again",Toast.LENGTH_SHORT).show();

      }

Добавить запрос разрешения android.permission.ACCESS_NETWORK_STATE в манифест приложения:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Ответ 5

Я предпочитаю команду svc

svc wifi disable
svc wifi enable

над командой netcfg

netcfg mlan0 up/down

Потому что, когда вы отклоняете Wi-Fi, используя последний, он восстановится через некоторое время, и я не узнал почему.