0

我正在使用以下代码检查互联网连接:

try {
                        HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection());
                        httpConnection.setRequestProperty("User-Agent", "Test");
                        httpConnection.setRequestProperty("Connection", "close");
                        httpConnection.setConnectTimeout(15000); 
                        httpConnection.connect();
                        if (httpConnection.getResponseCode() == 204 && httpConnection.getContentLength() == 0){
                        //internet is avialable

                            return;
                        }else{
                             Log.e(TAG, "Internet connection error: " + httpConnection.getResponseCode()
                                     + ": " + httpConnection.getResponseMessage());
                        }
                    } catch (IOException e) {
                        Log.e(TAG, "Internet connection error: " + e);
                    }

我收到以下响应:代码:204 消息:无内容

但内容长度大于 0,因此失败。有人可以帮我理解发生了什么吗?

谢谢,阳光

4

3 回答 3

0

根据你想ping google的标题,但是你通过HTTP请求一个站点,这两个东西是不一样的。因此,如果您想在 Android 中 ping,请访问这篇文章:如何从 Java Android ping 外部 IP

于 2014-10-20T20:10:52.467 回答
0

如果您信任您的 Android 设备,那么您可以使用以下方法:

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

}

但是如果你想自己做,那么你应该使用 ping 方法,因为它比 HTTP 请求需要更少的资源

上面的方法基本上是询问android系统是否有互联网,如果你ping google,那么你就自己做吧

于 2014-10-20T20:42:15.110 回答
0
public Boolean isOnline() {
    try {
        Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
        int returnVal = p1.waitFor();
        boolean reachable = (returnVal==0);
        return reachable;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}
于 2017-08-19T23:16:07.480 回答