Как отключить/включить сеть, переключиться на Wi-Fi в эмуляторе Android?
Я работаю над библиотекой Push Notifications для Android (http://deaconproject.org/), которая должна действовать, если сетевое подключение прерывается или изменяется - а именно, ему необходимо повторно инициировать подключение к серверу или приостановить его работу до тех пор, пока не будет доступно сетевое подключение. Это, похоже, отлично работает и Android BroadcastReceiver для "android.net.ConnectivityManager.CONNECTIVITY_ACTION".
Моя проблема заключается в тестировании библиотеки - я бы хотел автоматически протестировать ответ библиотеки на неработающее сетевое соединение или переход от 3G к Wi-Fi в различных условиях конфигурации. Проблема в том, что я не хочу сидеть с эмулятором и весь день нажимать F8.
Есть ли способ программно манипулировать сетевыми подключениями на Android из теста jUnit, не прибегая к переключению режима полета? Я уже пробовал выдавать команды эмулятору через консоль, управляя режимом GSM и т.д., Но когда состояние телефона меняется на дисплее, подключение к Интернету остается.
Ответы
Ответ 1
Щелкните правой кнопкой мыши по проекту на панели "Проводник проекта", выберите "Запустить как", затем "Запустить конфигурации".
В левой части окна, показанного модально, выберите "Приложение Android" и в правой части того же окна выберите вкладку "Цель".
В нижней части окна в разделе "Параметры запуска эмулятора" имеется множество вариантов подключения к Интернету.
Надеюсь, это помогло.
Игорь
Ответ 2
Я нашел приложение Android Dev Tools действительно полезным.
Он позволяет вам манипулировать важными системными настройками, такими как сетевое подключение. Он даже позволяет установить интервал, в котором он автоматически включает и выключает Wi-Fi, что позволяет вам тестировать сетевые приемники, связанные с сетью.
Если вы хотите установить приложение Dev Tools на устройства разработки, вы можете скопировать приложение из своего эмулятора а затем установите его на устройство с помощью ADB. Чтобы скопировать приложение из запущенного эмулятора выполните:
adb -e pull /system/app/Development.apk ./Development.apk
Это копирует файл .apk в текущий каталог. Затем установите его на подключенном устройстве:
adb -d install Development.apk
![enter image description here]()
Ответ 3
Возможно, вы захотите также взглянуть на представление управления эмулятором в eclipse. Мне не удастся заставить его убить мои данные на данный момент, но похоже, что должен.
![alt text]()
Ответ 4
К сожалению, нет возможности по-настоящему отключить сетевой доступ из unit test программно. Я зарегистрировал запрос на улучшение Android для этой проблемы.
Ответ 5
Простое, но немного длинное и тяжелое решение слишком добавляет слой абстракции над вашим монитором состояния соединения wifi.
Добавить объект (NetworkStateManager), он должен обладать областью действия Singleton (см. RoboGuice или Dagger для этого, или получить доступ к уникальному экземпляру через экземпляр вашего приложения).
Добавить методы регистрации, отменить регистрацию слушателей этой сущности, используя шаблон наблюдения Observable Observer.
Каждое действие должно регистрироваться на нем во время onStart, незарегистрировать в onStop.
Сама сущность будет модифицирована BroadCastReceiver.
Это полностью можно проверить, если вы используете инфраструктуру DI, вы сможете ввести управляемый заглушку в свои действия и посмотреть, как они реагируют на изменения состояния сети.