Android互联网检查(非网络检查)

时间:2015-04-02 19:07:18

标签: android connectivity internet-connection

所以这是一个很大的启示 - Android SDK似乎没有可靠的方法来检查互联网访问。

请允许我澄清一下。

Android文档&大多数在线样本使用类似于此处的方法:https://stackoverflow.com/a/4009133/980917

类似于:

public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}

但是 - 这只是检查您是否连接到网络并且不保证您可以访问互联网。

对于那些不了解这一点的人来说,通过拔掉" IN"很容易重现。来自路由器的以太网电缆或连接到未连接到互联网的任何Wifi。

已知的工作方式:

1)尝试访问网站:https://stackoverflow.com/a/5803489/980917 这有问题,因为需要线程管理。

2)尝试ping Google的DNS:https://stackoverflow.com/a/27312494/980917 不需要包装在线程中但会冻结UI。

我在寻找:

理想情况下,我希望将Internet检查作为实用程序类中的一个简单静态方法,可以从UI或业务逻辑代码中调用。由于上面的解决方案,因此在调用者类中需要额外的开销来处理线程管理时,实际上并不能很好地工作。

有没有办法在Android中获得可靠的互联网检查,而不会使用线程管理代码来污染调用者类?

感谢。

1 个答案:

答案 0 :(得分:1)

我做了一个带有一组静态方法的special class for this。众所周知,并在您的问题方法中显示,以检测网络是否可用。它还有一种方法来检查目标服务器/主机是否可通过此网络访问 - checkIsServerReachable()。但是,由于它是一个网络任务,它不能在UI线程上运行,所以这里唯一的方法是使用AsyncTask,Thread或回调。

相关问题