创建没有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
但是,您可以通过关闭3G,而不是通过在模拟器中按F8 到测试它。我不知道这是否会模拟你正在寻找的零位,但它值得一试。
请参阅here了解更多快捷方式。
我试图关闭3G数据 - 这模拟关闭手机中的3G数据 - 并且连接信息不为空,而是其getState返回DISCONNECTED。显然这不是我所追求的。 – 2013-03-07 15:45:00
我什至不能找到去除hw的地方。GSMMODEM。最新版本的ADV经理不会给我这些选项。我想,我可以寻找avd的xml,但禁用所有单元格数据对我来说不是一种选择。我想我只会添加检查空值。 – 2013-03-11 10:46:41
我还没有更新过AVD管理器,但您不需要通过任何方式更改选项。按说明编辑。 – Geobits 2013-03-11 12:40:41