我正在尝试编写一个应用程序,需要知道何时没有可用的IP网络连接。我正在使用android.net.conn.CONNECTIVITY_CHANGE广播事件以及ConnectivityManager来响应状态的变化来实现这一点,但是我在模拟器中测试我的设置时遇到了问题。
我尝试了两种飞行模式并按下F8以禁用“蜂窝网络”,但即使这两种情况都参与其中,应用程序仍“看到”底层网络。
是否有人设法找到模拟完全缺乏网络访问的方法?
答案 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时,它会在一段时间后恢复,我没有找到原因。