检测 Android 上是否有可用的 Internet 连接

新手上路,请多包涵

可能重复:

如何检查Android上的互联网访问? InetAddress 永远不会超时

我需要检测安卓设备是否连接到互联网。

NetworkInfo 类提供了一个非静态方法 isAvailable() 听起来很完美。

问题是:

 NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}

抛出此错误:

 The constructor NetworkInfo is not visible.

安全的赌注是有另一个类返回 NetworkInfo 对象。但我不知道是哪个。

  1. 如何让上面的代码片段工作?
  2. 我怎么能在在线文档中找到我需要的信息?
  3. 您能否为此类检测提出更好的方法?

原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 859
2 个回答

The getActiveNetworkInfo() method of ConnectivityManager returns a NetworkInfo instance representing the first connected network interface it can find or null if none of the interfaces are连接的。检查此方法是否返回 null 应该足以判断互联网连接是否可用。

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

您还需要:

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

在你的 android 清单中。

编辑:

请注意,拥有活动的网络接口并不能保证特定的网络服务可用。网络问题、服务器停机、低信号、强制门户、内容过滤器等都会阻止您的应用程序到达服务器。例如,在您收到来自 Twitter 服务的有效响应之前,您无法确定您的应用程序是否可以访问 Twitter。

原文由 Alex Jasmin 发布,翻译遵循 CC BY-SA 4.0 许可协议

ConnectivityManager 的 getActiveNetworkInfo() 方法返回一个 NetworkInfo 实例,该实例表示它可以找到的第一个连接的网络接口,如果接口已连接,则返回 null 如果没有。检查此方法是否返回 null 应该足以判断 Internet 连接是否可用。

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

您还需要:

在你的 android 清单中。

编辑:

请注意,拥有活动的网络接口并不能保证特定的网络服务可用。网络问题、服务器停机、低信号、强制门户、内容过滤器等都会阻止您的应用程序到达服务器。例如,在您收到来自 Twitter 服务的有效响应之前,您无法确定您的应用程序是否可以访问 Twitter。

getActiveNetworkInfo() 不应该永远给 null。我不知道他们提出这个想法时在想什么。它应该总是给你一个对象。

原文由 axllaruse 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题