在一个 Android 应用程序中,我正在尝试测试用户是否具有有效的 Internet 连接。如果您有兴趣,可以参考上一个问题Detecting limited network connectivity in Android? 中的一些背景知识?
代码基本上是这样的:
try {
HttpParams myParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(myParams, 10000);
HttpConnectionParams.setSoTimeout(myParams, 10000);
httpClient = new DefaultHttpClient(myParams);
request = new HttpHead(url);
response = httpClient.execute(request);
statusCode = response.getStatusLine().getStatusCode();
if (statusCode != 200)
{
return false;
}
return true;
} catch(Exception e) {
return false;
}
我可以使用 HttpConnectionParams 控制连接和套接字的超时。但是,如果我的设备已连接到 Wifi,但 wifi 无法访问 Internet,我在异常中遇到的错误是:
libcore.io.GaiException:getaddrinfo 失败:EAI_NODATA(没有与主机名关联的地址)
无法解析主机“www.example.com”:没有与主机名关联的地址
看起来它在 DNS 查找时超时。我可以控制 DNS 查找的超时时间吗?httpClient.execute 需要大约 45 秒才能失败,但上述异常除外。我希望它早点放弃。