android连接wifi时,但是无法上网,这个状态的检测办法
现在是这么个需求,接入wifi时,但是却上不了网,这时app会卡在欢迎页面,卡主约3-5分钟,有时候还发生崩溃错误,查看代码,原来的代码如下:
最后确定就是在waitFor()函数卡住了。
查询原因,确定在 ping命令上,-w 3000没执行,这条命令语句不好使。
将-w 3000去掉,就变成"ping -c 1"执行时间却缩短到10s。
可能怀疑是个别android机器系统版本不一致造成的,又尝试了红米,结果是一样的。
不知道为什么-w 3000在linux下不执行,在windows下试了好使。手里没有linux机器,也没办法试那个命令。
最后用httpClient请求到百度看返回码解决这个问题,解决代码:
//检测是否能够上网,
public static boolean isConnectNetwork() {
// HttpClient连接对象
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
// HttpGet连接对象使用get方式请求
HttpGet myget = new HttpGet("http://www.baidu.com/");
HttpResponse response = null;
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
tools.debugger("请求开始时间", df.format(new Date()));
response = client.execute(myget);
} catch (ClientProtocolException e) {
e.printStackTrace();
tools.debugger("读取数据超时", "读取数据超时");
tools.debugger("超时时间", df.format(new Date()));
return false;
} catch (IOException e) {
e.printStackTrace();
tools.debugger("io流出错", "io流出错");
tools.debugger("io流出错时间", df.format(new Date()));
return false;
}
Log.d("响应值为", response.getStatusLine().getStatusCode() + "");
tools.debugger("响应时间", df.format(new Date()));
// 返回值为200,即为服务器成功响应了请求,其余的,则为失败
if (response.getStatusLine().getStatusCode() == 200) {
tools.debugger("请求数据成功", "请求数据成功");
return true;
}
return false;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律