创建没有3G连接的Android AVD

时间:2013-03-07 11:20:47

标签: android android-emulator emulation android-wifi

我的应用程序中的一个功能是通过互联网发送数据。在尝试发送数据之前,我检查是否存在连接:

private boolean isConnected() {
    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo.State val1 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
    NetworkInfo.State val2 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
    return NetworkInfo.State.CONNECTED.equals(val1) || NetworkInfo.State.CONNECTED.equals(val2);
}

这在模拟器和我测试的几个真实设备上运行得非常好。然后,我收到了客户的错误报告,该报告在调查结果为NullPointerException的{​​{1}}行getState

显然,TYPE_MOBILE在没有3G的设备(仅限WiFi的平板电脑)上返回connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)。虽然我在Nexus 7模拟器上进行了测试,但我没有收到此错误。

因此,我感兴趣的是创建一个明确没有3G的AVD(即仅用于WiFi设备的AVD),以便我可以调查/测试这样的场景。我没有在模拟器选项中找到任何东西,但也许我只是在错误的地方寻找。这甚至可能吗?

2 个答案:

答案 0 :(得分:3)

您应该能够更改AVD的硬件设置以删除调制解调器。该选项标记为hw.gsmModem,但我相信它会禁用所有“单元数据”连接,而不仅仅是GSM。

如果要在不使用AVD Manager的情况下更改硬件选项,请编辑avd文件夹中的config.ini文件。默认情况下,该文件夹位于:

  • Linux / Mac:〜/ .android / avd / yourAvdName

  • Windows Vista / 7 /(8?): C:\ Users \ .android \ yourAvdName

  • Windows XP: C:\ Documents and Settings \ .android \ yourAvdName

只需添加一行说明:

hw.gsmModem=no

有关详细信息,请参阅herehere


但是,您可以通过在仿真器中按 F8 来关闭3G来测试它。我不知道这是否会模拟你正在寻找的空值,但它值得一试。

有关更多快捷方式,请参阅here

答案 1 :(得分:1)

我不相信有一个简单的解决方案。与此同时,我采用了我的代码:

private boolean isConnected(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info1 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    NetworkInfo info2 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo.State val1 = (info1 == null ? null : info1.getState());
    NetworkInfo.State val2 = (info2 == null ? null : info2.getState());
    return (info1 != null && NetworkInfo.State.CONNECTED.equals(val1)) || (info2 != null && NetworkInfo.State.CONNECTED.equals(val2));
}

当接口不存在时,它会处理null值。