2010-11-11 92 views
26

我正试图编写一个应用程序,需要知道何时不存在IP网络连接。我正在使用android.net.conn.CONNECTIVITY_CHANGE广播事件与ConnectivityManager一起对状态变化做出反应,以达到此目的,但我在模拟器中测试我的设置时遇到问题。如何在Android模拟器中模拟总体网络丢失

我尝试了两种飞行模式并按F8键来禁用“蜂窝网络”,但即使这两种模式都使应用仍“看到”底层网络。

有没有人设法找到一种方法来模拟完全缺乏网络访问?

+0

@Hardlib:你可以尝试我发布的新的更新答案吗? – 2010-11-11 14:36:59

+0

我想我已经弄清楚我看到的问题在这里。我有一个第三方库,它可以完成一些网络工作,即使在示例代码显示网络出现故障后,仍然可以继续在仿真器中工作。可以拆除第三方连接,因此当ConnectivityManager说没有网络时我会这样做。 – hardillb 2010-11-11 15:13:00

回答

4

我已经经历了按F8键图标状态栏后显示没有连接,但如果您尝试浏览它的作品。也许它与这个已打开的bug有关:bug 3838

+0

如果您的计算机是无线的,可以将Windows 8设置为飞行模式,这是一种体面的“真实”方式来测试这种情况,因为模拟器不知道发生了什么。 – AutoM8R 2013-08-17 02:41:45

1

isAvailable - 没有这个isConnected可以返回TRUE当WIFI被禁用。请参阅下面的代码,这详情网址 http://developer.android.com/guide/developing/tools/emulator.html

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

     if (
connMgr.getActiveNetworkInfo() != null && 
      conMgr.getActiveNetworkInfo().isAvailable() && 

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING) { 

      //notify user you are online 

     }  else if (

    conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) { //notify user you are not online 

      Toast.makeText(getBaseContext(),"Please 

    Check Your Internet Connection and Try Again",Toast.LENGTH_SHORT).show(); 

     } 

添加android.permission.ACCESS_NETWORK_STATE许可请求您的应用程序清单:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

嗨,我有一些非常相似的代码,这个问题是,它然后触发一些我需要测试和调试的复杂代码。测试这些事件是问题所在,这就是为什么我要模拟将激活代码的触发器。 – hardillb 2010-11-11 13:51:15

+0

@hardlib:你能详细说明一下吗,我收到你的信息清楚了吗? – 2010-11-11 13:58:24

4

Eclipse中有DDMS透视图,您可以在其中操作连接速度和可用性(在“模拟器控制”选项卡中)。如果它不适合你,我可能会建议打开你的操作系统的网络甚至插上电缆:)

+2

是的,它工作,但你失去了你的adb连接:-( – arnouf 2012-12-12 09:21:31

3

哎呀,我打算发布这个响应(http://stackoverflow.com/questions/ 3400109/simulate-wireless-network-in-emulator/6078544#6078544)这里。

这里是我想出了在模拟器上模拟整个网络连接丢失解决方案:

写下面的脚本并将它命名为“nonetwork.sh”

netcfg eth0 down 
sleep 10 
netcfg eth0 up 
netcfg eth0 dhcp 

上传下面的脚本从这个命令模拟器:

adb push nonetwork.sh /data/local/nonetwork.sh 

变化的权限

adb shell chmod 700 /data/local/nonetwork.sh 

运行它

adb shell /data/local/nonetwork.sh 

当网络出现故障,你将无法访问ADB很好,但一旦连接重新建立它会再次运行在设备上。希望这可以帮助。

+0

伟大的提示,tnx!只有小提示:此提示的用户必须保留脚本位置。/ mnt下的脚本有“被宠坏的所有者”。 – 2013-12-04 14:42:16

1

我喜欢svc命令

svc wifi disable 
svc wifi enable 

netcfg命令

netcfg mlan0 up/down 

因为当你使用后者拒绝无线网络,它将我还没有发现一段时间后恢复为什么。