如何在Android emulator中禁用/启用网络,切换到Wifi?

如何在Android emulator中禁用/启用网络,切换到Wifi?,android,unit-testing,testing,networking,Android,Unit Testing,Testing,Networking,我正在为Android()开发一个推送通知库,如果网络连接被中断或更改,它需要采取措施,即需要重新启动服务器连接或暂停其操作,直到网络连接可用。对于“Android.net.ConnectivityManager.CONNECTIVITY_ACTION”,使用Android和BroadcastReceiver似乎可以很好地工作 我的问题是测试库-我想在各种配置条件下自动测试库对断开的网络连接或从3G过渡到WiFi的响应。问题是,我不想整天坐在模拟器前按F8键 有没有一种方法可以在jUnit测试中

我正在为Android()开发一个推送通知库,如果网络连接被中断或更改,它需要采取措施,即需要重新启动服务器连接或暂停其操作,直到网络连接可用。对于“Android.net.ConnectivityManager.CONNECTIVITY_ACTION”,使用Android和BroadcastReceiver似乎可以很好地工作

我的问题是测试库-我想在各种配置条件下自动测试库对断开的网络连接或从3G过渡到WiFi的响应。问题是,我不想整天坐在模拟器前按F8键


有没有一种方法可以在jUnit测试中以编程方式操纵Android上的网络连接,而无需切换飞行模式?我已经尝试过通过控制台向模拟器发出命令,操作GSM模式等,但是当手机状态在屏幕上改变时,Internet连接仍然保持打开状态。

右键单击“project Explorer”面板中的project,选择“运行方式”,然后选择“运行配置”

在模式显示窗口的左侧选择“Android应用程序”,在同一窗口的右侧选择选项卡“目标”

在窗口底部的“Emulator启动参数”部分,您有大量有关internet连接的选项

我希望这有帮助


Igor

您可能也希望查看eclipse中的emulator控件视图。目前,我没有太多的运气让它杀死我的数据,但它看起来应该是

我发现这个应用非常有用

它允许您操作重要的系统设置,如网络连接。它甚至允许您设置一个时间间隔,在该时间间隔内自动打开和关闭wifi,从而允许您测试与网络相关的广播接收器

如果您想在真实的应用程序上安装Dev Tools应用程序 开发设备,您可以从仿真器复制应用程序 然后使用ADB将其安装到设备上。复制申请表 从正在运行的仿真器中,执行:

这会将.apk文件复制到当前目录中。然后安装它 在您连接的设备上,使用:


不幸的是,没有办法通过编程方式从单元测试中真正禁用网络访问。我为此问题提交了一份申请。

一个简单但有点长且沉重的解决方案是在wifi连接状态监视器上添加一个抽象层

添加一个实体(NetworkStateManager),它应该是一个应用程序范围的单例(请参阅RoboGuice或Dagger,或者通过应用程序实例访问唯一实例)

使用Observable Observator设计模式向该实体添加注册、取消注册侦听器的方法

每个活动都必须在onStart期间注册,在onStop中注销

实体本身将由BroadCastReceiver修改


这是完全可测试的,如果您使用DI框架,您将能够将可驱动存根注入到您的活动中,并查看它们对网络状态更改的反应。

感谢您的回答-这是朝着正确方向迈出的一步。emulator启动参数可以在启动时调整网络连接,但我们正在寻找一种在运行时以编程方式实现这一点的方法。“被测”库必须响应Android广播意图(如Android.net.ConnectivityManager.CONNECTIVITY_操作),以便根据设备的网络状态调整其状态。我们需要的是一种在JUnit测试中更改网络状态的方法,这样我们就可以验证意图是否被接收并正确执行…我尝试了这个选项,虽然是通过控制台ADB连接,但它似乎并没有实际删除连接;尽管我关闭了GSM数据连接,网络流量仍然正常。我在这里寻找的是一种编程方式——在自动化测试(如JUnit测试)的范围内,我也遇到了同样的问题(通信似乎仍在继续)。听起来您已经找到了一种通过ADB shell编写脚本的方法(如果它再次开始工作,或者我们偶然发现了正确的控制命令)。仅供参考,我还能够通过telnet将一些网络设置(尽管存在相同的问题)切换到emu,并通过gsm数据关闭和gsm语音关闭命令,感谢您的提示,将这些状态更改为
未注册
对我来说很有效。但是不知道单元测试。这对那些希望手动操作网络状态的人很有帮助,但是这里的问题是寻找一种以编程方式(即从单元测试中)操作网络状态的方法。这可以通过发送到Dev工具应用程序的意图来实现吗?另请参见2009年记录的一个开放式Android缺陷的链接。给那只小狗投票!你有没有找到解决这个问题的办法?我也想知道答案。有什么想法吗?还有,你们能投票吗?
adb -e pull /system/app/Development.apk ./Development.apk
adb -d install Development.apk