2010-10-24 79 views
23

我想測試我的應用程序在用戶處於無信號區域或手機處於飛行模式時的行爲。如何將AVD(模擬器)置入OFFLINE模式?

- >如何將Android虛擬設備置於離線模式(無法連接到互聯網)?

我曾嘗試以下:

  • 通過AVD設置激活飛行模式:奇怪的是,這不起作用(瀏覽互聯網還是有可能在飛行模式!)

  • 禁用我的電腦上的網絡連接:因爲我需要上網的時候我正在測試我的應用程序,這顯然作品,但不盡如人意

+1

目前沒有辦法從單元測試中以編程方式真正禁用網絡訪問。我爲此問題提交了[增強請求](http://code.google.com/p/android/issues/detail?id=36916)。 – 2012-08-31 13:33:21

+1

@Sebastien我在下面提供了一個很好的解答,但不幸的是完全斷開了AVD。不過,你可以看到你的應用程序的行爲。 – 2013-01-17 10:20:08

回答

14

我看到所有相同的問題。 DDMS並沒有完全殺死它。 F8也沒有。而且在模擬器內部也沒有打開飛行模式。我們應該都可能是明星this issue某人在2009年登錄了。

+1

此答案不能解決問題。查看我的答案,以便真正運行離線AVD。 – 2013-01-04 14:48:39

+0

在此期間他們沒有修復它而關閉了問題。但是我們應該越來越多,因爲它仍然存在於5.0.1中!似乎是最好的解決方法是不使用模擬器並在真實設備上測試。 – steven 2015-01-27 21:12:22

+0

這是2015年,由於某種原因,我在默認的Nexus 5 x86仿真器上下載Android Studio安裝時仍然面臨此問題。 – 2015-07-02 13:33:45

2

我要做的是進入次在Window菜單中,選擇'open perspective-> other'打開DDMS透視圖。在DDMS視角內,您有一個'模擬器控制'視圖,您可以在其中調整延遲,漫遊,您可以給它不同的電話和數據狀態。因此,按照此過程獲取模擬器視圖,然後轉到「數據」下拉菜單並選擇「拒絕」選項。

+1

這確實是我正在尋找的那種控制。但是,它也行不通......我將語音和數據設置爲拒絕,但我仍然可以從AVD瀏覽互聯網。這絕對看起來像一個在模擬器中的錯誤... – 2010-10-24 19:34:31

+0

*它在我的包裝盒* :)上工作我想象可能有別的東西我已經設置,你不這樣做。當我有機會時,我會深入研究它,看看我能否重現它不工作...什麼版本的eclipse/avd? – 2010-10-26 18:05:12

+0

我也是這樣試過的。但是,這隻會導致亞行斷開...... – 2012-07-31 10:10:45

2

當我將語音和數據調整爲「未註冊」而不是「拒絕」時,我在我的'模擬器控制'視圖中找到適用於我的作品。現在我終於得到了AVD離線網絡,而我仍然可以發佈這個答案。

+0

不適用於我:我的應用程序仍然可以從網上下載數據。 – 2012-02-07 20:59:53

+0

同樣適用於我...... – 2012-07-31 10:10:01

+0

這只是有用的改變狀態,但它仍然能夠連接到互聯網。 – GoodSp33d 2013-05-08 11:15:16

0

老問題,但我發現了一個解決方案:

  1. 打開命令行:CTRL + R>cmd
  2. 更改到Android工具文件夾

    cd C:\Program Files\Android\android-sdk\tools

  3. 運行模擬器與虛假的DNS服務器。將2.3.3更改爲您的AVD的名稱。該@使它開始:

    emulator.exe @2.3.3 -dns-server 127.0.0.1

檢查手冊,瞭解更多命令line options

+0

這不是沒有網絡,這是一個可檢測的手機狀態。 – Walf 2012-03-08 05:21:20

+1

總有人想要更多......我想你可以切換飛行模式來改變狀態。當然,你也可以使用ip而不是域名進行連接。但是對於大多數應用程序來說,這會削減互聯網連接,這比其他任何答案都要多。請閱讀關於[向下投票]的常見問題解答(http://stackoverflow.com/privileges/vote-down):'下調應該保留給極端情況。','如果有問題,請留下評論或編輯帖子糾正它' – PiTheNumber 2012-03-08 07:00:43

1

而不是在Android模擬器中使用飛行模式(這不起作用),測試時關閉與系統的網絡連接。也就是說,以太網連接或Wi-Fi的切換。爲我工作得很好。由詹姆斯·科赫所說的問題的

0

一個評論說,有一個解決辦法:

 
Comment 15 by iscy%[email protected], Jul 8, 2011 
Finally found a work around for this issue: 
telnet localhost 5554 // Connects to the emulator 
qemu monitor    // Enter in the QEmu functionalities 
info network    // List the network adapter "user.0" is usually the name 
set_link user.0 down  // Shut the network down 
set_link user.0 up  // Re-enable networking 

但是:

 
Comment 16 by [email protected], Sep 6, 2011 
This work around doesn't work for me on MacOS 10.7.1 and SDK rev 12 (with platform 2.2, 2.1 and 2.3.3) 
... ... 
qemu monitor 
KO: internal error: could not detach from console ! 

- >我也一樣在Windows Vista上,SDK啓示錄19和平臺10(2.3.3)

但也許這對某人是可用的...

0

最後,h關於這種方法。

android-sdks/tools/emulator -avd [AVD name goes here] -qemu -net nic,vlan=0 -net user,vlan=1 

其實,這是一招,因爲下面的崩潰我的模擬器:

android-sdks/tools/emulator -avd [AVD name goes here] -qemu -net none 

與Debian的Android模擬器V21.0測試。

+3

這確實會使設備進入離線模式,但那麼它的離線甚至連adb都不能連接到它... – 2013-05-27 09:35:31

20

WIFI:

$ adb shell svc wifi enable 
$ adb shell svc wifi disable 

移動數據:

$ adb shell svc data enable 
$ adb shell svc data disable 
+0

我燒了兩個小時試圖讓這個想通了。謝謝你,先生! – fmcauley 2016-07-15 00:58:42

+0

它從adb命令行工作,但是當我在應用程序中嘗試它時,它不起作用,並且不打印任何錯誤日誌。你有什麼想法,爲什麼在使用ProcessBuilder直接從應用程序中調用時不工作? public void disableMobileData(){ ProcessBuilder pb = new ProcessBuilder(「svc」,「data」,「disable」); runCommand(pb);公共無效runCommand(ProcessBuilder pb){ } pc.waitFor(); (異常e){ } catch(異常e){ Log.e(TAG,「Exception」+ e); } } – krawiec 2016-12-16 14:04:24

6

我找到了一個可行的解決方案。在Android 6.0上測試7.0仿真器,但應該在其他人上工作。

網絡下來:

adb shell ifconfig eth0 down 

網絡達:

adb shell ifconfig eth0 up 

如果你碰到一個 「Permission denied」 錯誤,請重新啓動ADB守護進程根:

adb root 

,然後再試一次。