创建没有3G连接的android AVD

问题描述:

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

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,在getState线上,对于TYPE_MOBILE

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

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

我不相信有一个简单的解决方案。在此同时,我通过我的代码看起来像这样:

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值时的界面不存在。

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

如果您想在不使用AVD管理器的情况下更改硬件选件,请编辑在avd文件夹中找到的config.ini文件。默认情况下,该文件夹位于:

  • 的Linux/Mac的:〜/ .android/AVD/yourAvdName

  • 的Windows Vista/7 /(8): C:\用户\ .android \ yourAvdName

  • Windows XP中: C:\ Documents和Settings \ .android \ yourAvdName

只需添加一条线,说:

hw.gsmModem=no 

更多细节见herehere


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

请参阅here了解更多快捷方式。

+0

我试图关闭3G数据 - 这模拟关闭手机中的3G数据 - 并且连接信息不为空,而是其getState返回DISCONNECTED。显然这不是我所追求的。 – 2013-03-07 15:45:00

+0

我什至不能找到去除hw的地方。GSMMODEM。最新版本的ADV经理不会给我这些选项。我想,我可以寻找avd的xml,但禁用所有单元格数据对我来说不是一种选择。我想我只会添加检查空值。 – 2013-03-11 10:46:41

+0

我还没有更新过AVD管理器,但您不需要通过任何方式更改选项。按说明编辑。 – Geobits 2013-03-11 12:40:41