Как отключить / включить сеть, переключиться на 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, вы сможете внедрить управляемую заглушку в ваши действия и посмотреть, как они реагируют на изменения состояния сети.