Как отключить / включить сеть, переключиться на Wifi в эмуляторе Android?

Я работаю над библиотекой push-уведомлений для Android ( http://deaconproject.org/), которая должна предпринимать какие-либо действия, если сетевое подключение прерывается или изменяется, а именно: необходимо повторно инициировать подключение к серверу или приостановить его работу до подключение к сети доступно. Это, кажется, работает нормально, используя Android BroadcastReceiver для "android.net.ConnectivityManager.CONNECTIVITY_ACTION".

Моя проблема заключается в тестировании библиотеки - я хотел бы автоматически проверить реакцию библиотеки на разорванное сетевое соединение или переход от 3G к WiFi при различных условиях конфигурации. Проблема в том, что я не хочу сидеть с эмулятором и нажимать F8 весь день.

Есть ли способ программно управлять сетевыми подключениями на Android из теста jUnit, не прибегая к переключению режима полета? Я уже пытался выдавать команды на эмулятор через консоль, манипулировать режимом GSM и т. Д., Но, пока состояние телефона меняется на дисплее, интернет-соединение остается.

5 ответов

Щелкните правой кнопкой мыши проект на панели "Project Explorer", выберите "Run As" и "Run Configurations".

В левой части окна, отображаемого модально, выберите "Приложение Android", а в правой части того же окна выберите вкладку "Цель".

В нижней части окна в разделе "Параметры запуска эмулятора" у вас есть множество параметров, касающихся подключения к Интернету.

Я надеюсь, что это помогло.

Игорь

Я нашел приложение Android Dev Tools действительно полезным.

Это позволяет вам манипулировать важными настройками системы, такими как подключение к сети. Он даже позволяет вам установить интервал, в котором он автоматически включает и выключает Wi-Fi, что позволяет вам тестировать ваши сетевые приемники вещания.

Если вы хотите установить приложение Dev Tools на реальное устройство разработки, вы можете скопировать приложение из эмулятора и затем установить его на свое устройство с помощью ADB. Чтобы скопировать приложение из запущенного эмулятора, выполните:

adb -e pull /system/app/Development.apk ./Development.apk

Это копирует файл.apk в текущий каталог. Затем установите его на подключенное устройство с помощью:

adb -d install Development.apk

Возможно, вы захотите посмотреть на представление управления эмулятором и в Eclipse. Мне не очень повезло, когда я убил мои данные, но похоже, что так и должно быть.

альтернативный текст

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

Простое, но немного длинное и тяжелое решение - это добавить слой абстракции над монитором состояния Wi-Fi-соединения.

Добавьте Entity (NetworkStateManager), он должен синглтон области приложения (см. RoboGuice или Dagger, или получите доступ к уникальному экземпляру через экземпляр вашего приложения).

Добавьте методы для регистрации, отмены регистрации слушателей в этой сущности, используя шаблон проектирования Observable Observer.

Каждое действие должно быть зарегистрировано во время onStart, отменить регистрацию в onStop.

Сам объект будет изменен BroadCastReceiver.

Это полностью проверяется: если вы используете инфраструктуру DI, вы сможете внедрить управляемую заглушку в ваши действия и посмотреть, как они реагируют на изменения состояния сети.

Другие вопросы по тегам