Possible Duplicate:
How to check internet access on Android? InetAddress never timeouts

我需要检测Android设备是否连接到互联网.

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

问题是:

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

抛出以下错误:

The constructor NetworkInfo is not visible.

可以肯定的是,还有另一个类返回NetworkInfo对象.但我不知道是哪个.

  1. 如何让上述代码片段正常工作?
  2. 我怎么才能在在线文档中找到我需要的信息呢?
  3. 你能推荐一种更好的检测方法吗?

推荐答案

ConnectivityManagergetActiveNetworkInfo()方法返回一个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 list 中.

Edit:

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

Android相关问答推荐

RippleTheme在作曲material 1.7.0中被废弃

如何在Android Room中使用@Relation多对一查询

使用不同的Google帐户登录

无法安装后重新编译android代码'

使用Retrofit2的API调用:我如何能够一直进行API调用,以更新数据而无需重新打开应用程序

对支持哪些数据存储区方法感到困惑

在带有REACT-Native-CLI的开发和生产中使用Firebase的最佳实践

我无法在底部导航栏中正确导航-Android底部导航视图

有没有什么方法可以让Beeware在安卓手机上显示图片?

如何将 Room Persistence 依赖项正确添加到我的 Jetack Compose Android 应用程序

将 React Native 应用程序背景带到前台

是什么导致调用 Firebase 服务器?

如何在 Jetpack Compose 中对数据类进行 Parcelize

Android AGP 8 + Gradle 8 + Kotlin 1.8 导致 Kapt 出错

有人可以向我解释这两个结果有什么区别吗?

Jetpack Compose:对角拆分卡片并将内容放入其中

如何在 TextInputEdit 中调整可绘制对象的大小

如何在 Android Studio 中使用 Github Copilot?

如何在 kotlin 的 android room DB 中设置一对多关系

Google Play 服务登录在 Unity Android 上无法正常运行