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

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

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

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

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

4b9b3361

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