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

时间:2010-11-11 13:21:46

标签: android android-emulator

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

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

是否有人设法找到模拟完全缺乏网络访问的方法?

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

答案 2 :(得分: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的访问权限,但一旦重新建立连接,它将再次运行。希望这会有所帮助。

答案 3 :(得分:1)

isAvailable - 如果禁用WIFI,则isConnected可以返回TRUE。有关详细信息,请参阅下面的代码和此URL 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" />

答案 4 :(得分:1)

我更喜欢svc命令

svc wifi disable
svc wifi enable

超过netcfg命令

netcfg mlan0 up/down

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