2010-11-11 13 views
26

Sto provando a scrivere un'applicazione che deve sapere quando non è disponibile alcuna connessione di rete IP. Sto usando l'evento broadcast android.net.conn.CONNECTIVITY_CHANGE insieme a ConnectivityManager per reagire ai cambiamenti di stato per raggiungere questo obiettivo, ma sto riscontrando problemi durante il test del mio set up nell'emulatore.Come simulare la perdita totale della rete nell'emulatore Android

Ho provato entrambe le modalità di volo e premendo F8 per disattivare la "Rete cellulare", ma anche con entrambe queste funzioni l'applicazione "vede" ancora la rete sottostante.

Qualcuno è riuscito a trovare un modo per simulare una totale mancanza di accesso alla rete?

+0

@Hardlib: puoi provare la nuova risposta aggiornata pubblicata da me? –

+0

Penso di aver capito quale sia il problema che sto vedendo qui. Ho una libreria di terze parti che funziona con alcune reti che continuano a funzionare nell'emulatore anche dopo che il codice di esempio dice che la rete non funziona. È possibile abbattere la connessione di terze parti, quindi lo farò quando ConnectivityManager dice che non c'è rete. – hardillb

risposta

4

ho sperimentato che dopo aver premuto F8 un'icona nella barra di stato mostra che non c'è connettività, ma se si tenta di navigare funziona. Forse ha qualcosa a che fare con questo bug aperto: bug 3838

+0

Potrebbe mettere Windows 8 in modalità aereo se il tuo computer è wireless, questo è un modo decente di "vita reale" per testarlo poiché l'emulatore non ha idea di cosa sia successo. – AutoM8R

1

isAvailable - senza questo isConnected può restituire TRUE quando WIFI è disattivato. Fare riferimento al codice qui sotto e questo URL per ulteriori informazioni 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(); 

     } 

Aggiungere la richiesta android.permission.ACCESS_NETWORK_STATE permesso di vostro manifesto dell'applicazione:

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

Ciao, ho un codice molto simile a questo, il problema è che poi avvia un codice complesso che ho bisogno di testare e debugare. È il test di questi eventi che rappresenta il problema, motivo per cui voglio simulare i trigger che attiveranno il codice. – hardillb

+0

@hardlib: puoi elaborarlo, sto chiarendo il tuo messaggio? –

4

C'è una prospettiva DDMS in Eclipse, dove è possibile manipolare con velocità di connessione e disponibilità (nella scheda Controllo emulatore). Se non funziona per te, potrei suggerire di accendere la rete del tuo sistema operativo o persino di scollegare il cavo :)

+2

sì funziona ma hai perso la tua connessione adb :-( – arnouf

3

Oops, intendevo pubblicare questa risposta (http://stackoverflow.com/questions/ 3400109/simulate-network-in-emulator/6078544 # 6078544) qui.

Ecco la soluzione mi è venuta per la simulazione di perdita totale della connessione di rete sull'emulatore:

Scrivere il seguente script e il nome "nonetwork.sh"

netcfg eth0 down 
sleep 10 
netcfg eth0 up 
netcfg eth0 dhcp 

Upload il seguente script per l'emulatore tramite questo comando:

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

Modificare le autorizzazioni

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

Run it

adb shell /data/local/nonetwork.sh 

Mentre la rete non funziona sul dispositivo non potrai più accedere ai adb come bene, ma una volta che la connessione è ristabilita funzionerà ancora. Spero che questo ti aiuti.

+0

Ottimo suggerimento, tnx! Solo piccola nota: gli utenti di questo suggerimento devono conservare la posizione dello script. Gli script sotto/mnt hanno "proprietario viziato". –

1

preferisco il comando svc

svc wifi disable 
svc wifi enable 

il comando netcfg

netcfg mlan0 up/down 

Perché quando si gira verso il basso WiFi utilizzando questi ultimi, si riprenderà dopo un po 'che non ho scoperto perché.

Problemi correlati