在Android中检查互联网连接(功能比较)

在Android中检查互联网连接(功能比较),android,connectivity,Android,Connectivity,因此,我在比较下面应该实现的两个函数中的哪一个。我知道一种是检查手机是否连接到互联网,另一种是检查你是否有连接?一个比另一个更好吗?一个比另一个做什么?他们做同样的事情吗 职能1: public static boolean hasActiveInternetConnection(Context context) { if (isNetworkAvailable(context)) { try { HttpURLConnection urlc = (Ht

因此,我在比较下面应该实现的两个函数中的哪一个。我知道一种是检查手机是否连接到互联网,另一种是检查你是否有连接?一个比另一个更好吗?一个比另一个做什么?他们做同样的事情吗

职能1:

public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable(context)) {
       try {
          HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
          urlc.setRequestProperty("User-Agent", "Test");
          urlc.setRequestProperty("Connection", "close");
          urlc.setConnectTimeout(1500); 
          urlc.connect();
          return (urlc.getResponseCode() == 200);
       } catch (IOException e) {
          Log.e(LOG_TAG, "Error checking internet connection", e);
       }
    } else {
       Log.d(LOG_TAG, "No network available!");
    }
    return false;
}
职能2:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
    = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null;
}

函数2具有更清晰的声明方式,您可以请求网络可用性,而不是执行检查步骤(如函数1)。
此外,Android 5.0还提供了新的多网络API,让您的应用程序能够动态扫描具有特定功能的可用网络,并建立与它们的连接,请参见功能2以更清晰的声明方式,您可以请求网络可用性,而不是执行检查步骤(如功能1)。
此外,Android 5.0还提供了新的多网络API,让您的应用程序能够动态扫描具有特定功能的可用网络,并建立与这些网络的连接,请参见

我通常同时使用这两种API。。。与您的情况类似(isNetworkavailable&&hasActiveInternetConnection)


第一种方法将检查是否存在连接(例如,如果手机处于飞行模式,则不会有连接),如果这似乎有效,第二种方法将检查是否确实可以通过该连接接收数据

我通常使用这两种方法。。。与您的情况类似(isNetworkavailable&&hasActiveInternetConnection)


第一种方法将检查是否存在连接(例如,如果手机处于飞行模式,则不会有连接),如果这似乎有效,第二种方法将检查是否确实可以通过该连接接收数据

我知道facebook启动了一个库来检查网络流量质量,您可以检查github:


我知道facebook推出了一个用于检查网络流量质量的库,您可以查看github:


我认为先使用函数2。如果成功,则调用函数1.;-)
功能2将确保设备上有一些连接。如果是,那么function2将ping一些uri,在本例中为google。在设备可能连接到某些wifi,但仍存在连接问题等情况下,此功能非常有用


有时可能出现的唯一问题是连接速度非常慢。即使连接可用,也可能会说没有可用的连接

在我看来,请先使用function2。如果成功,则调用函数1.;-)
功能2将确保设备上有一些连接。如果是,那么function2将ping一些uri,在本例中为google。在设备可能连接到某些wifi,但仍存在连接问题等情况下,此功能非常有用


有时可能出现的唯一问题是连接速度非常慢。即使连接可用,也可能会说没有可用的连接。首先,功能1。需要许可

<uses-permission android:name="android.permission.INTERNET"/>

功能2.需要

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

功能1。

  • 传输实际数据(错误)
  • 如果DNS服务器死机,则无法工作
  • 如果谷歌倒下,则不起作用(可能性很小,但不是0%)
  • 在慢速移动网络上,可能需要相当长的时间才能得到响应(非常糟糕)

实际上,您应该只使用函数2。并正确处理对您的服务器的失败请求。

首先,函数1。需要权限

<uses-permission android:name="android.permission.INTERNET"/>

功能2.需要

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

功能1。

  • 传输实际数据(错误)
  • 如果DNS服务器死机,则无法工作
  • 如果谷歌倒下,则不起作用(可能性很小,但不是0%)
  • 在慢速移动网络上,可能需要相当长的时间才能得到响应(非常糟糕)

实际上,您应该只使用函数2.并正确处理对您的服务器的失败请求

我尝试了+1!那很酷。你已经实现了吗,如果是的话,难不难?我还没有使用这个API,但它看起来并不难实现:)我尝试了+1!那很酷。你已经实现了吗,如果是的话,难不难?我还没有使用这个API,但它看起来并不难实现:)所有答案都很好,选择这个是因为它提到了最佳实践。。。。谢谢大家。所有答案都很好,选择这个答案是因为它提到了最佳实践。。。。谢谢大家。