小编典典

检测Android上是否有可用的互联网连接

all

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

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

问题是:

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

抛出此错误:

The constructor NetworkInfo is not visible.

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

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

阅读 92

收藏
2022-03-03

共1个答案

小编典典

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

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

您还需要:

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

在你的 android 清单中。

编辑:

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

2022-03-03