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;
	}  


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值