2010-06-09 30 views
28

Estoy trabajando en una biblioteca de notificaciones push para Android (http://deaconproject.org/) que debe tomar medidas si la conectividad de red se interrumpe o cambia, es decir, necesita reiniciar una conexión de servidor o suspender su funcionamiento hasta que esté disponible la conectividad de red. Parece que funciona bien y Android BroadcastReceiver para "android.net.ConnectivityManager.CONNECTIVITY_ACTION".¿Cómo deshabilitar/habilitar la red, cambiar a WiFi en el emulador de Android?

Mi problema está en probar la biblioteca: me gustaría probar automáticamente la respuesta de la biblioteca a una conexión de red interrumpida, o una transición de 3G a WiFi, en diversas condiciones de configuración. El problema es que no quiero sentarme con el emulador y presionar F8 todo el día.

¿Hay alguna manera de manipular mediante programación las conexiones de red en Android desde una prueba jUnit sin recurrir a cambiar el modo avión? Ya he intentado emitir comandos al emulador a través de la consola, manipular el modo GSM, etc., pero mientras el estado del teléfono cambia en la pantalla, la conexión a Internet permanece activa.

+1

¿Alguna vez ha logrado encontrar una solución a este problema? – pehrs

+0

Me gustaría saber una respuesta, también. ¿Algunas ideas? –

+0

Ver también [esta pregunta] (http://stackoverflow.com/questions/8198889/testing-in-airplane-mode-in-android-emulator). –

Respuesta

7

Haga clic derecho en el proyecto en el panel "Explorador de proyectos", elija "Ejecutar como" y luego "Ejecutar configuraciones".

En el lado izquierdo de la ventana modal mostrada, seleccione "Aplicación Android" y en el lado derecho de la misma ventana, elija la pestaña "Destino".

En la parte inferior de la ventana, en la sección "Parámetros de inicio del emulador", tiene una gran cantidad de opciones con respecto a la conectividad a Internet.

Espero que haya sido de ayuda.

Igor

+7

Gracias por su respuesta: este es un paso en la dirección correcta. Los parámetros de inicio del emulador pueden ajustar la conectividad de la red en el momento del arranque, pero estamos buscando una manera de hacerlo mediante programación, en tiempo de ejecución. La biblioteca "en prueba" debe responder a los Intentos de difusión de Android (como android.net.ConnectivityManager.CONNECTIVITY_ACTION) para ajustar su estado al estado de la red del dispositivo. Lo que necesitamos es una forma de cambiar el estado de la red desde la prueba JUnit, para que podamos verificar que las Intents se reciban y actúen de manera apropiada ... – mtbkrdave

4

Es posible que desee ver la vista de control emulador en Eclipse también. No estoy teniendo mucha suerte de hacerlo para matar mis datos en este momento, pero parece que debería.

alt text

+0

He intentado esta opción, aunque a través de la conexión ADB de la consola, pero no parece eliminar realmente la conectividad; a pesar de que apagué la conexión de datos GSM, el tráfico de red aún funciona. Lo que estoy buscando aquí es una forma de hacerlo * programáticamente * - dentro del alcance de una prueba automatizada, como una prueba JUnit. – mtbkrdave

+0

Tuve el mismo problema (la comunicación parece continuar). Parece que has encontrado una forma de guionizar esto a través del shell de ADB (debería empezar a funcionar de nuevo o tropezamos con los comandos de control adecuados). FYI También he podido alternar algunas configuraciones de red (aunque existe el mismo problema) a través de telnet con los comandos emu y gsm data off y gsm voice off ala http://stackoverflow.com/questions/2577785/ringing-myself- using-android-emulator/2578245 # 2578245 – Chris

+0

Gracias por la pista, cambiar esos estados a 'no registrado' funcionó para mí. Sin embargo, no tengo idea de las pruebas unitarias. – Walf

6

que he encontrado la aplicación Android Dev Tools realmente útil.

Le permite manipular configuraciones importantes del sistema, como la conectividad de red. Incluso le permite establecer un intervalo en el que activa y desactiva wifi automáticamente, lo que le permite probar los receptores de difusión relacionados con la red.

Si desea instalar la aplicación Herramientas Dev en un verdadero dispositivo de desarrollo , puede copiar la aplicación desde el emulador de y luego instalarlo en su dispositivo mediante ADB. Para copiar la aplicación de un emulador en funcionamiento, ejecute:

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

Esto copia el archivo APK en el directorio actual. Luego instalarlo en su dispositivo conectados con:

adb -d install Development.apk 

enter image description here

+3

Esto es útil para aquellos que desean manipular manualmente el estado de la red, pero la pregunta aquí es buscar una forma de hacerlo programáticamente (es decir, desde dentro de una prueba unitaria). ¿Podría hacerse esto usando un intento enviado a la aplicación Dev Tools? – mtbkrdave

4

Desafortunadamente, no hay manera de verdaderamente inhabilitar el acceso a la red desde dentro de una unidad de prueba mediante programación.Archivé Android enhancement request para este problema.

0

Una solución simple, pero un tanto larga y pesada, es agregar una capa de abstracción a su monitor de estado de conexión wifi.

Agregue una Entidad (NetworkStateManager), debe una aplicación de ámbito único (consulte RoboGuice o Dagger a este limpiamente, o acceda a la instancia única a través de su instancia de aplicación).

Agregue los métodos para registrar, anular el registro de los oyentes a esta entidad, utilizando el patrón de diseño observable observador.

Cada actividad tendrá que registrarse durante OnStart, anular el registro en onStop.

La entidad en sí será modificada por un BroadCastReceiver.

Eso es totalmente comprobable, si utiliza un marco DI, podrá inyectar un stub manejable en sus actividades y ver cómo reaccionan a los cambios de estado de la red.

Cuestiones relacionadas