【问题标题】:Internet connection in android emulator always displays connected stateandroid模拟器中的互联网连接总是显示连接状态
【发布时间】:2012-01-26 01:28:00
【问题描述】:

我尝试了多种方法来检查我的安卓模拟器中的互联网连接

  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 电缆,上述代码也会显示“连接存在”。 .请帮助找到正确的方法来做到这一点。我的清单文件中有 ACCESS_NETWORK_STATE 和 INTERNET 权限

【问题讨论】:

  • 您是否在模拟器中启用/禁用了 3g 连接?按 F8 即可。
  • 将模拟设备置于飞行模式时会发生什么?
  • 当我将模拟器置于飞行模式时,代码可以正常工作。stackoverflow 真的很震撼,我从来没有想过用我的帖子得到回复,谢谢 Macarse 和 Jim.NetworkInfo 信息在我输入时得到空值进入飞行模式,然后像上面那样检查“信息”的空值并提醒用户。我没有在真实设备上工作过。这种检查互联网连接的方法是否正确?
  • 我在模拟器和网络模拟方面的经验是它不能像您预期的那样工作,我通过反复试验发现了飞行模式的解决方法。与众多平台一样,要精通 Android 需要大量的实验。

标签: android internet-connection


【解决方案1】:

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 不为空时,您将始终显示 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. 在模拟器中使用 F8 关闭/打开互联网”,让我很开心!我可能不小心推了它,然后用头撞到它上面。 :-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 1970-01-01
    • 2017-03-20
    • 2011-06-21
    • 1970-01-01
    • 2018-02-06
    • 2011-11-07
    • 2018-12-31
    • 2012-07-06
    相关资源
    最近更新 更多