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

标签 android internet-connection android-internet

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

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

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

问题是:

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

抛出此错误:

The constructor NetworkInfo is not visible.

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

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

最佳答案

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

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 list 中。

编辑:

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

关于android - 检测 Android 上是否有可用的 Internet 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238921/

相关文章:

Android:如何录制 mp3 广播(音频)流

android - android list 中的权限名称是否不区分大小写?

android - 在服务中实现广播接收器

android - 如何检查移动数据是否实际处于 Activity 状态或 wifi 是否实际连接到任何热点?

java - 如何检测Android中的上传/下载传输速率?

android - 检测android设备是否连接到互联网

android - Robolectric 单元测试 build.os 版本返回不正确?

java - Recycler View 线性布局管理器返回 null

c# - 自动重新连接到互联网

ios - 没有互联网连接时,为什么我的Interstitial iAd崩溃了?