【问题标题】:Network present but no Internet connection网络存在但没有 Internet 连接
【发布时间】:2013-11-08 14:22:22
【问题描述】:

目前我正在开发应该可以离线和在线工作的应用程序。但是在某些情况下,网络可用但没有互联网连接。或者我如何检查连接速度。如果连接速度非常低,它应该在离线模式下工作。 下面是我如何检查网络可用性的代码。

public static boolean isNetworkAvailable(Context ctx) {
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();

    if (activeNetworkInfo != null) {
        if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            Log.v("Connection Type", "WI FI");
        } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
            Log.v("Connection Type", "Mobile");
        }
    }

    return activeNetworkInfo != null
            && activeNetworkInfo.isConnectedOrConnecting();
}

【问题讨论】:

  • 在这种情况下,您可以设置超时限制,如果在该时间内数据发送或接收成功,则显示网络错误并在离线模式下执行该任务。
  • ConnectivityManager 只会在连接 Wifi 或连接移动数据时为您提供,但不会提供实际互联网连接的证明。在我的应用程序中,我假设如果网络可用,则它已连接到互联网并抛出任何错误的通知消息。我还假设 WiFi 是快速的互联网,而移动数据很慢

标签: android


【解决方案1】:

在这种情况下,您可以设置超时限制,如果在该时间内数据发送或接收成功,则显示网络错误并在离线模式下执行该任务。

查看此链接-

how to set Http connection timeout on Android

【讨论】:

    【解决方案2】:
      public boolean isConnectingToInternet(){
    
        ConnectivityManager connectivity = (ConnectivityManager)YourActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null) 
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null) 
                  for (int i = 0; i < info.length; i++) 
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }
    
          }
          return false;
    }
    

    【讨论】:

      【解决方案3】:

      尝试处理这两个Timeout exception 可以帮助你。

      try
      {
            //do connection process
      }
      catch (SocketTimeoutException e) 
      {
           System.out.println(e.getMessage());
      }
      catch (ConnectTimeoutException e2)
      {
           System.out.println(e2.getMessage());
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多