14

我尝试了多种方式来检查我的 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 权限

4

2 回答 2

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。

希望这可以帮助!

于 2010-05-30T07:55:07.633 回答
1

实际上,这并不能告诉您模拟器是否通过主机 PC 连接到网络。如果您在 PC 上运行它并且 PC 的无线已关闭,只要模拟器认为它处于在线状态,它仍然会返回 true。我能够确定模拟器是否真的在线的唯一方法是尝试获取页面并查看它是否成功。

于 2012-01-25T17:28:00.490 回答