如何以编程方式检查Android中互联网连接的可用性?

我想以编程方式检查Android手机/模拟器中是否有互联网连接。因此,一旦我确定存在互联网连接,那么我将拨打互联网电话。

所以它就像“嘿模拟器!如果你有互联网连接,那么请打开这个页面,否则做SomeThingElse();”


答案 1

我为自己实现的方法:

/*
 * isOnline - Check if there is a NetworkConnection
 * @return boolean
 */
protected boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) {
        return true;
    } else {
        return false;
    }
}

请注意,这是网络连接检查。如果有网络连接,则不必是 Internet 连接。


答案 2

连接到网络并不能保证互联网连接。

您可能已连接到家中的 wifi,但可能没有互联网连接。或者,您可能在餐厅,在那里您可以连接到wifi,但仍然需要热点密码才能使用互联网。在这种情况下,上述方法将返回true,但设备不会有互联网,如果没有被正确的尝试和捕获包围,应用程序可能会崩溃。

底线,网络连接,并不意味着互联网连接,它只是意味着您的设备的无线硬件可以连接到另一台主机,两者都可以建立连接。

以下是一种可以检查设备是否可以连接到网站并相应地返回答案的方法。

if (networkConnectivity())
{
    try
    {
        HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.anywebsiteyouthinkwillnotbedown.com").openConnection());
        urlc.setRequestProperty("User-Agent", "Test");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(3000); //choose your own timeframe
        urlc.setReadTimeout(4000); //choose your own timeframe
        urlc.connect();
        networkcode2 = urlc.getResponseCode();
        return (urlc.getResponseCode() == 200);
    } catch (IOException e)
    {
        return (false);  //connectivity exists, but no internet.
    }
} else
{
    return false;  //no connectivity
}

推荐