【问题标题】:How to disable/enable network, switch to Wifi in Android emulator?如何禁用/启用网络,在 Android 模拟器中切换到 Wifi?
【发布时间】:2011-03-01 11:32:06
【问题描述】:

我正在开发适用于 Android (http://deaconproject.org/) 的推送通知库,如果网络连接中断或更改,它需要采取措施 - 即,它需要重新启动服务器连接或暂停其操作,直到网络连接可用。使用 Android BroadcastReceiver for "android.net.ConnectivityManager.CONNECTIVITY_ACTION" 似乎可以正常工作。

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

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

【问题讨论】:

标签: android unit-testing testing networking


【解决方案1】:

在“项目资源管理器”面板中右键单击项目,选择“运行方式”,然后选择“运行配置”。

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

在窗口底部的“仿真器启动参数”部分,您有很多关于互联网连接的选项。

我希望这会有所帮助。

伊戈尔

【讨论】:

  • 感谢您的回答 - 这是朝着正确方向迈出的一步。模拟器启动参数可以在启动时调整网络连接,但我们正在寻找一种在运行时以编程方式执行此操作的方法。 “被测”库必须响应 Android 广播意图(例如 android.net.ConnectivityManager.CONNECTIVITY_ACTION),以便将其状态调整为设备的网络状态。我们需要的是一种从 JUnit 测试中更改网络状态的方法,以便我们可以验证 Intent 是否已被接收并正确执行...
【解决方案2】:

我发现Android Dev Tools 应用真的很有帮助。

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

如果您想在真实设备上安装开发工具应用程序 开发设备,您可以从模拟器中复制应用程序 然后使用 ADB 将其安装在您的设备上。复制应用程序 从正在运行的模拟器中执行:

adb -e pull /system/app/Development.apk ./Development.apk

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

adb -d install Development.apk

【讨论】:

  • 这对那些希望手动操作网络状态的人很有帮助,但这里的问题是寻找一种以编程方式进行操作的方法(即从单元测试中)。这可以使用发送到开发工具应用程序的意图来完成吗?
【解决方案3】:

您可能还想查看 eclipse 中的模拟器控制视图。目前我运气不好让它杀死我的数据,但看起来它应该

【讨论】:

  • 我试过这个选项,虽然是通过控制台 ADB 连接,但它似乎并没有真正删除连接;尽管我关闭了 GSM 数据连接,但网络流量仍然有效。我在这里寻找的是一种以编程方式的方法 - 在自动化测试的范围内,例如 JUnit 测试。
  • 我也遇到了同样的问题(通信似乎还在继续)。听起来您已经找到了一种通过 ADB shell 编写脚本的方法(如果它再次开始工作,或者我们偶然发现了正确的控制命令)。仅供参考,我还能够通过 telnet 将一些网络设置(尽管存在同样的问题)切换到 emu,并关闭 gsm 数据和 gsm 语音关闭命令 ala stackoverflow.com/questions/2577785/…
  • 感谢您的提示,将这些状态更改为 unregistered 对我有用。不过,对单元测试一无所知。
【解决方案4】:

不幸的是,没有办法在单元测试中以编程方式真正禁用网络访问。我为此问题提交了Android enhancement request

【讨论】:

    【解决方案5】:

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

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

    使用 Observable Observer 设计模式添加方法来注册、注销该实体的侦听器。

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

    实体本身将被广播接收器修改。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 2012-04-19
      • 2011-05-13
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多