android emulator中的Internet连接始终显示已连接状态
我尝试了很多方法在我的android模拟器中检查互联网连接android emulator中的Internet连接始终显示已连接状态,android,internet-connection,Android,Internet Connection,我尝试了很多方法在我的android模拟器中检查互联网连接 ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info= conMgr.getActiveNetworkInfo(); if(info != null || info.isConnected()) {
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info= conMgr.getActiveNetworkInfo();
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else{
Log.v("NetworkInfo","Not Connected state");
Log.v("Reason",info.getReason());
}
即使我在系统中禁用了Internet连接,我的代码似乎也会显示已连接状态
所以我猜这可能有用
if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ) {
Log.v("Congr","Connection Present");
}
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
但是,即使我断开网线,上面的代码也会显示“连接存在”。
。请帮助找到正确的方法。我在清单文件中拥有访问网络状态和INTERNET权限。1断开INTERNET电缆与此无关。使用F8在emulator中关闭/打开internet
2在第一个代码中,此逻辑错误:
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
应该是:
if(info != null && info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else {
Log.v("conMgr"," No Connection");
}
如果使用| |,则结果如下:
a) 当info为null时,info.isConnected()将崩溃
b) 当信息不为空时,您将始终显示连接状态
但是,即使您解决了这个问题,代码也不会完全正确(参见4)
3在第二个代码中,此逻辑是错误的:
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
应该是:
if(info != null && info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
else {
Log.v("conMgr"," No Connection");
}
为什么??因为连接和断开的状态比连接和断开的状态多
但是,即使您解决了这个问题,代码也不会完全正确(参见4)
4这适用于模拟器和设备
connected = ( conMgr.getActiveNetworkInfo() != null &&
conMgr.getActiveNetworkInfo().isAvailable() &&
conMgr.getActiveNetworkInfo().isConnected() )
请注意,使用isAvailable-如果不使用此选项,则当禁用WIFI时,isConnected会返回TRUE
希望这有帮助 实际上,这并不能告诉您模拟器是否通过主机PC连接到web。如果您在PC上运行它,并且PC的无线已关闭,则只要模拟器认为其处于联机状态,它仍会返回true。我能够确定模拟器是否真正在线的唯一方法是尝试获取一个页面,看看它是否成功。是否在模拟器中启用/禁用3g连接?你可以按F8键。当你将模拟设备置于飞行模式时会发生什么?当我将模拟器置于飞行模式时,代码会起作用。stackoverflow真的很震撼,我从来没有想象过在我的帖子的几分钟内得到回复,谢谢你Macarse和Jim。当我置于飞行模式时,NetworkInfo得到空值,我选中“info”如上文所述,为空值,并提醒用户。我没有在实际设备中使用过。这种检查互联网连接的方法正确吗?我使用模拟器和网络模拟的经验是,它不能像您预期的那样工作,我通过反复试验发现了飞行模式的解决方法。与许多平台一样,精通Android需要大量的实验。“1.在仿真器中使用F8关闭/打开internet”,让我很开心!我可能是不小心推了一下,头撞到了上面。:-)