Android - 如何检查,设备是否有Internet连接?

时间:2017-03-16 18:35:14

标签: android internet-connection

此代码有效:

public static boolean isConnected()
{
    ConnectivityManager cm = (ConnectivityManager)App.getAppContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = cm.getActiveNetworkInfo();
    if (ni != null) {
        if (ni.getType() == ConnectivityManager.TYPE_WIFI)
            if (ni.isConnected())
                return true;
        if (ni.getType() == ConnectivityManager.TYPE_MOBILE)
            if (ni.isConnected())
                return true;
        if (ni.getType() == ConnectivityManager.TYPE_ETHERNET)
            if (ni.isConnected())
                return true;
    }
    return false; //none of connections available
}

问题是:我们还必须检查TYPE_MOBILE_DUNTYPE_WIMAXTYPE_VPN吗?

设备可以通过蓝牙连接到互联网吗?

4 个答案:

答案 0 :(得分:1)

只有一条评论。想想你需要什么,记得连接到wifi路由器并不意味着你有互联网连接,或者你能够像后端服务器那样到达任何兴趣点。 如果您的应用需要访问服务才能运行,可能是检查您是否可以通过异步调用在早期阶段访问该服务的最佳方式,并且只有在您可以验证该连接时才会继续。

答案 1 :(得分:1)

尝试向http://www.google.com发出简单的GET请求。如果您的回复代码是200或400,那么互联网连接就存在。

protected static boolean hasInternetAccess()
{
    try
    {
        URL url = new URL("http://www.google.com");

        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        urlc.setRequestProperty("User-Agent", "Android Application:1");
        urlc.setRequestProperty("Connection", "close");
        urlc.setConnectTimeout(1000 * 30);
        urlc.connect();

        // http://www.w3.org/Protocols/HTTP/HTRESP.html
        if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
        {
            // Requested site is available
            return true;
        }
    }
    catch (Exception ex)
    {
        // Error while trying to connect
        return false;
    }
    return false;
}

有关详细信息,请参阅:The perfect function to check Android internet connectivity including bluetooth pan

答案 2 :(得分:0)

这就是我用的全部:

public static boolean isOffline() {
    ConnectivityManager cm = (ConnectivityManager) BigOvenApplication.getInstance()
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    return netInfo == null || !netInfo.isConnected();
}

我认为你不需要任何东西。

答案 3 :(得分:0)

只需调用方法isConnectedToNetwork来检查它是否有连接。将此方法写入公共类文件中。因此,您可以在任何需要的地方使用简单的方法。

public static boolean isConnectedToNetwork(Context thisActivity) {
        ConnectivityManager connMgr = (ConnectivityManager) thisActivity.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
        if (activeInfo != null && activeInfo.isConnected()) {
            return true;
        }
        return false;
    }

开始操作前检查。 // thisActivity表示片段的getActivity()

   if (isConnectedToNetwork(thisActivity)) {
           // your operation code follows
     } else {
          //show alert box that there is no internet connection
     }