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
对象。但我不知道是哪个。
- 如何让上面的代码 fragment 工作?
- 我如何在在线文档中找到我需要的信息?
- 您能否为此类检测提出一种更好的方法?
最佳答案
ConnectivityManager
的 getActiveNetworkInfo()
方法返回一个 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/