2010-10-24 77 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 

,然后再试一次。