[英]Internet connection in android emulator always displays connected state
我试过在很多方面检查我的android模拟器中的Internet连接
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");
}
但即使我断开互联网电缆,上面的代码也会显示“连接存在”。 。请帮助找到一个正确的方法来执行此操作。我的清单文件中有ACCESS_NETWORK_STATE和INTERNET权限
1断开互联网电缆是无关紧要的。 使用F8在仿真器中关闭/打开Internet
2在第一个代码中,这个逻辑是错误的:
if(info != null || info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
它应该是:
if(info != null && info.isConnected()) {
Log.v("NetworkInfo","Connected State");
}
如果你使用|| 然后这是结果:a)当info为null时,info.isConnected()将崩溃b)当info不为null时,您将始终显示Connected State
但是,即使您解决了这个问题,代码也不会完全正确(参见4 )
3在第二个代码中,这个逻辑是错误的:
else if ( conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED
|| conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED) {
Log.v("conMgr"," No Connection");
}
应该:
else {
Log.v("conMgr"," No Connection");
}
为什么? 因为状态多于CONNECTED和DISCONNECTED。
但是,即使您解决了这个问题,代码也不会完全正确(参见4 )
4这适用于模拟器和设备。
connected = ( conMgr.getActiveNetworkInfo() != null &&
conMgr.getActiveNetworkInfo().isAvailable() &&
conMgr.getActiveNetworkInfo().isConnected() )
注意使用isAvailable - 如果没有这个,当禁用WIFI时,isConnected可以返回TRUE。
希望这可以帮助!
实际上,这并不能告诉您仿真器是否通过托管PC连接到Web。 如果你在PC上运行它并且PC的无线功能被关闭,那么只要模拟器认为它处于在线状态,它仍然会返回true。 我能够确定模拟器是否真的在线的唯一方法是尝试获取页面并查看它是否成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.