可能重复:如何检查Android上的互联网访问? InetAddress永远不会超时
我需要检测Android设备是否连接到Internet .
NetworkInfo
类提供了一个听起来很完美的非静态方法 isAvailable()
.
问题是:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
抛出此错误:
The constructor NetworkInfo is not visible.
安全的赌注是有另一个类返回 NetworkInfo
对象 . 但我不知道哪个 .
-
如何让上面的代码段工作?
-
我怎么能在在线文档中找到自己需要的信息?
-
您能为这种类型的检测提出更好的方法吗?
6 回答
我检查Wi-Fi和移动互联网如下......
显然,可以轻松修改它以检查各个特定的连接类型,例如,如果您的应用需要更高的Wi-Fi速度才能正常工作等 .
ConnectivityManager
的getActiveNetworkInfo()
方法返回NetworkInfo
实例,表示它可以找到的第一个连接的网络接口,如果没有连接,则返回null
. 检查此方法是否返回null
应该足以判断是否有可用的Internet连接 .您还需要:
在你的Android清单中 .
Edit:
请注意,拥有活动网络接口并不能保证特定的联网服务可用 . 网络问题,服务器停机时间,低信号,强制网络门户,内容过滤器等都可能阻止您的应用访问服务器 . 例如,在收到Twitter服务的有效回复之前,您无法确定您的应用是否可以访问Twitter .
另一个重要的说明 . 您必须在AndroidManifest.xml中设置
android.permission.ACCESS_NETWORK_STATE
才能使其正常工作 .您只需要正确阅读课程文档,您就可以找到所需的所有答案 . 查看ConnectivityManager上的文档 . 说明会告诉您该怎么做 .
第1步:在项目中创建一个AppStatus类(您也可以提供任何其他名称) . 然后,请将以下给定的行粘贴到您的代码中:
第2步:现在检查您的设备是否具有网络连接,然后只需将此代码段添加到您要检查的位置...
可能我发现自己:
您还需要:
getActiveNetworkInfo()不应该永远不会给null . 当他们提出这个问题时,我不知道他们在想什么 . 它应该总是给你一个对象 .