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
    评论
Android中,可以通过以下方法检测WiFi连接是否可用: 1. 使用ConnectivityManager类检查网络连接状态。使用该类的`getActiveNetworkInfo()`方法可以获取当前设备的网络连接状态。如果返回的对象为null,表示设备当前没有可用的网络连接。 2. 使用WifiManager类检查WiFi连接状态。使用该类的`getConnectionInfo()`方法可以获取当前设备连接WiFi信息,包括SSID、BSSID、信号强度等。如果返回的对象为null,表示设备当前没有连接WiFi网络。 3. 使用BroadcastReceiver监听WiFi连接状态变化。可以使用`android.net.wifi.STATE_CHANGE`和`android.net.conn.CONNECTIVITY_CHANGE`这两个Intent过滤器来监听WiFi连接状态的变化,当WiFi连接状态变化,会发送相应的广播。可以在BroadcastReceiver中处理这些广播,以便在WiFi连接状态发生变化执行相应的操作。 需要注意的是,要检测WiFi连接状态,必须在AndroidManifest.xml文件中声明相应的权限,如下所示: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> ``` 另外,检测WiFi连接状态也需要在运行获取权限,可以使用以下代码来请求权限: ```java if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_WIFI_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_WIFI_STATE}, requestCode); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值