2010-11-11 12 views
26

Estoy tratando de escribir una aplicación que necesita saber cuando no hay una conexión de red IP disponible. Estoy usando el evento de difusión android.net.conn.CONNECTIVITY_CHANGE junto con ConnectivityManager para reaccionar a los cambios de estado para lograr esto, pero estoy teniendo problemas para probar mi configuración en el emulador.Cómo simular pérdida total de red en Android Emulator

He intentado ambos modos de vuelo y presiono F8 para deshabilitar la "Red Celular", pero incluso con ambos activados, la aplicación aún "ve" la red subyacente.

¿Alguien ha logrado encontrar una forma de simular una falta total de acceso a la red?

+0

@Hardlib: ¿puedes probar la nueva respuesta actualizada que he enviado? –

+0

Creo que he resuelto cuál es el problema que estoy viendo aquí. Tengo una biblioteca de terceros que realiza un trabajo de red que continúa funcionando en el emulador incluso después de que el código de muestra indica que la red no funciona. Es posible eliminar la conexión de terceros, así que lo haré cuando el Administrador de conectividad diga que no hay red. – hardillb

Respuesta

4

he experimentado que después de presionar F8 un icono en la barra de estado muestra que no hay conectividad, pero si intenta navegar, funciona. Tal vez tiene algo que ver con este error abierto: bug 3838

+0

Podría poner Windows 8 en modo avión si su computadora es inalámbrica, esa es una manera decente de "vida real" para probar esto ya que el emulador no tiene idea de lo que sucedió. – AutoM8R

1

isAvailable - sin esto isConnected puede devolver TRUE cuando WIFI está deshabilitado. Consulte el código de abajo y este URL para obtener más información http://developer.android.com/guide/developing/tools/emulator.html

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (
connMgr.getActiveNetworkInfo() != null && 
      conMgr.getActiveNetworkInfo().isAvailable() && 

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING) { 

      //notify user you are online 

     }  else if (

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { //notify user you are not online 

      Toast.makeText(getBaseContext(),"Please 

    Check Your Internet Connection and Try Again",Toast.LENGTH_SHORT).show(); 

     } 

Añadir la solicitud android.permission.ACCESS_NETWORK_STATE permiso para su manifiesto de aplicación:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Hola, tengo un código muy similar a esto, el problema es que desencadena un código complejo que necesito probar y depurar. El problema es la prueba de estos eventos, por lo que quiero simular los activadores que activarán el código. – hardillb

+0

@hardlib: ¿puede explicar esto, estoy recibiendo su mensaje claro? –

4

Hay DDMS Perspective en Eclipse, donde puede manipular con la velocidad y disponibilidad de la conexión (en la pestaña Control del emulador). Si no funciona para usted, puedo sugerirle que active la red de su sistema operativo o incluso desconecte el cable :)

+2

sí funciona, pero ha perdido su conexión adb :-( – arnouf

3

Vaya, quería publicar esta respuesta (http://stackoverflow.com/questions/ 3400109/simulate-wireless-network-in-emulator/6078544 # 6078544) aquí.

Aquí está la solución que se me ocurrió para simular la pérdida total de la conexión de red en el emulador:

Escribir la siguiente secuencia de comandos y el nombre "nonetwork.sh"

netcfg eth0 down 
sleep 10 
netcfg eth0 up 
netcfg eth0 dhcp 

Sube la siguiente secuencia de comandos para el emulador a través de este comando:

adb push nonetwork.sh /data/local/nonetwork.sh 

cambiar los permisos

adb shell chmod 700 /data/local/nonetwork.sh 

Run que

adb shell /data/local/nonetwork.sh 

Mientras que la red está abajo en el dispositivo que va a perder el acceso a ADB también, pero una vez que se restablezca la conexión se ponga a funcionar de nuevo. Espero que esto ayude.

+0

¡Excelente consejo, tnx! Solo una pequeña nota: los usuarios de este consejo deben conservar la ubicación del script. Los scripts en/mnt tienen "propietario malcriado". –

1

prefiero el comando svc

svc wifi disable 
svc wifi enable 

el mando netcfg

netcfg mlan0 up/down 

Debido a que se baje WiFi utilizando este último, que se recuperará después de un tiempo que no he descubierto por qué.