我使用以下代码检查互联网连接:
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,因此失败。 有人可以帮我理解发生了什么吗?
谢谢, 晴天
答案 0 :(得分:0)
根据您要ping谷歌的标题,但您通过HTTP请求网站,这两件事情是不一样的。因此,如果您想在Android中ping,请访问以下帖子:How to Ping External IP from Java Android
答案 1 :(得分: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谷歌,那么你只需要自己动手
答案 2 :(得分: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;
}