2010-11-11 96 views
26

我正試圖編寫一個應用程序,需要知道何時不存在IP網絡連接。我正在使用android.net.conn.CONNECTIVITY_CHANGE廣播事件與ConnectivityManager一起對狀態變化做出反應,以達到此目的,但我在模擬器中測試我的設置時遇到問題。如何在Android模擬器中模擬總體網絡丟失

我嘗試了兩種飛行模式並按F8鍵來禁用「蜂窩網絡」,但即使這兩種模式都使應用仍「看到」底層網絡。

有沒有人設法找到一種方法來模擬完全缺乏網絡訪問?

+0

@Hardlib:你可以嘗試我發佈的新的更新答案嗎? – 2010-11-11 14:36:59

+0

我想我已經弄清楚我看到的問題在這裏。我有一個第三方庫,它可以完成一些網絡工作,即使在示例代碼顯示網絡出現故障後,仍然可以繼續在仿真器中工作。可以拆除第三方連接,因此當ConnectivityManager說沒有網絡時我會這樣做。 – hardillb 2010-11-11 15:13:00

回答

4

我已經經歷了按F8鍵圖標狀態欄後顯示沒有連接,但如果您嘗試瀏覽它的作品。也許它與這個已打開的bug有關:bug 3838

+0

如果您的計算機是無線的,可以將Windows 8設置爲飛行模式,這是一種體面的「真實」方式來測試這種情況,因爲模擬器不知道發生了什麼。 – AutoM8R 2013-08-17 02:41:45

1

isAvailable - 沒有這個isConnected可以返回TRUE當WIFI被禁用。請參閱下面的代碼,這詳情網址 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(); 

     } 

添加android.permission.ACCESS_NETWORK_STATE許可請求您的應用程序清單:

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

嗨,我有一些非常相似的代碼,這個問題是,它然後觸發一些我需要測試和調試的複雜代碼。測試這些事件是問題所在,這就是爲什麼我要模擬將激活代碼的觸發器。 – hardillb 2010-11-11 13:51:15

+0

@hardlib:你能詳細說明一下嗎,我收到你的信息清楚了嗎? – 2010-11-11 13:58:24

4

Eclipse中有DDMS透視圖,您可以在其中操作連接速度和可用性(在「模擬器控制」選項卡中)。如果它不適合你,我可能會建議打開你的操作系統的網絡甚至插上電纜:)

+2

是的,它工作,但你失去了你的adb連接:-( – arnouf 2012-12-12 09:21:31

3

哎呀,我打算髮布這個響應(http://stackoverflow.com/questions/ 3400109/simulate-wireless-network-in-emulator/6078544#6078544)這裏。

這裏是我想出了在模擬器上模擬整個網絡連接丟失解決方案:

寫下面的腳本並將它命名爲「nonetwork.sh」

netcfg eth0 down 
sleep 10 
netcfg eth0 up 
netcfg eth0 dhcp 

上傳下面的腳本從這個命令模擬器:

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

變化的權限

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

運行它

adb shell /data/local/nonetwork.sh 

當網絡出現故障,你將無法訪問ADB很好,但一旦連接重新建立它會再次運行在設備上。希望這可以幫助。

+0

偉大的提示,tnx!只有小提示:此提示的用戶必須保留腳本位置。/ mnt下的腳本有「被寵壞的所有者」。 – 2013-12-04 14:42:16

1

我喜歡svc命令

svc wifi disable 
svc wifi enable 

netcfg命令

netcfg mlan0 up/down 

因爲當你使用後者拒絕無線網絡,它將我還沒有發現一段時間後恢復爲什麼。