我尝试了很多方法来检查我的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权限
答案 0 :(得分:38)
1 断开互联网电缆是无关紧要的。使用F8在仿真器中关闭/打开互联网
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 - 如果没有此isConnected,则在禁用WIFI时可以返回TRUE。
希望这有帮助!
答案 1 :(得分:1)
实际上,这并不能告诉您仿真器是否通过托管PC连接到Web。如果你在PC上运行它并且PC的无线功能被关闭,那么只要模拟器认为它处于在线状态,它仍然会返回true。我能够确定模拟器是否真的在线的唯一方法是尝试获取页面并查看它是否成功。