如何在Android模拟器中模拟总网络丢失

我正在尝试编写一个应用程序,需要知道何时没有可用的IP网络连接。 我正在使用android.net.conn.CONNECTIVITY_CHANGE广播事件以及ConnectivityManager来响应状态的变化来实现这一点,但是我在模拟器中测试我的设置时遇到了问题。

我尝试了两种飞行模式并按下F8以禁用“蜂窝网络”,但即使这两种情况都参与其中,应用程序仍“看到”底层网络。

有没有人设法find一种模拟完全缺乏网络访问的方法?

Solutions Collecting From Web of "如何在Android模拟器中模拟总网络丢失"

我已经体验过,在按下F8后,状态栏中的图标显示没有连接,但如果您尝试浏览它可以工作。 也许它与这个被打开的bug有关: bug 3838

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

哎呀,我打算在这里发布这个回复(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,但一旦重新建立连接,它将再次起作用。 希望这可以帮助。

isAvailable – 如果没有这个,当禁用WIFI时, isConnected可以返回TRUE 。 有关详细信息,请参阅下面的代码和此urlhttp://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权限请求添加到应用程序清单:

  

我更喜欢svc命令

 svc wifi disable svc wifi enable 

通过netcfg命令

 netcfg mlan0 up/down 

因为当你使用后者关闭wifi时,它会在一段时间后恢复,我没有find原因。