信誉好的网站开发东莞seo整站优化火速
信誉好的网站开发,东莞seo整站优化火速,网站建设策划书1万字,南宁轨道交通app下载最近项目中有一个网络判断的需求#xff0c;因为终端只能连接wifi#xff0c;wifi即使连接上也可能会出现不能连接网络的问题#xff0c;所以需要进行网络连接的判断。ping的相关知识使用ping检验网络是否可以连接ping就是检测客户端是否可以上网。那么我们就上代码该段代码…最近项目中有一个网络判断的需求因为终端只能连接wifiwifi即使连接上也可能会出现不能连接网络的问题所以需要进行网络连接的判断。ping的相关知识使用ping检验网络是否可以连接ping就是检测客户端是否可以上网。那么我们就上代码该段代码来自http://blankj.com导入常用工具包compile com.blankj:utilcode:1.9.8这个里边有各种各样的常用的工具类下边的代码是NetworkUtils的一个方法/*** 判断网络是否可用* 需添加权限 {code }* 需要异步ping如果ping不通就说明网络不可用** param ip ip地址(自己服务器ip)如果为空ip为阿里巴巴公共ip* return {code true}: 可用{code false}: 不可用*/public static boolean isAvailableByPing(String ip) {if (ip null || ip.length() 0) {ip 223.5.5.5;// 阿里巴巴公共ip}ShellUtils.CommandResult result ShellUtils.execCmd(String.format(ping -c 1 %s, ip), false);boolean ret result.result 0;if (result.errorMsg ! null) {Log.d(NetworkUtils, isAvailableByPing() called result.errorMsg);}if (result.successMsg ! null) {Log.d(NetworkUtils, isAvailableByPing() called result.successMsg);}return ret;}这段代码完全可以作为网络检测的使用可是我在使用这段代码的时候偶尔会遇到anr的问题。出现anr就说明在主线程做了耗时操作这是我没有将这段代码放到子线程造成的问题。其实ping也就相当于去请求网络跟普通的接口请求差不多当网络比较慢的时候就会消耗时间放在主线程就会造成anr。在修改bug的时候我对这段代码进行了一些修改* 判断网络是否可用* 需添加权限 {code }* 需要异步ping如果ping不通就说明网络不可用** param ip ip地址(自己服务器ip)如果为空ip为阿里巴巴公共ip* return {code true}: 可用{code false}: 不可用*/public static boolean isAvailableByPing(String ip) {if (ip null || ip.length() 0) {ip 223.5.5.5;// 阿里巴巴公共ip}Runtime runtime Runtime.getRuntime();Process ipProcess null;try {//-c 后边跟随的是重复的次数-w后边跟随的是超时的时间单位是秒不是毫秒要不然也不会anr了ipProcess runtime.exec(ping -c 3 -w 3 ip);int exitValue ipProcess.waitFor();Log.i(Avalible, Process: exitValue);return (exitValue 0);} catch (IOException | InterruptedException e) {e.printStackTrace();} finally {//在结束的时候应该对资源进行回收if (ipProcess ! null) {ipProcess.destroy();}runtime.gc();}return false;}只需要把这个方法引用到子线程中就行了其实不引用也可以因为在这里设定了超时时间为3秒。但是最好是放到子线程里边。问题补充上边的代码在Android 7.1.2中出现了问题好好的WIFI连接上之后ping不通每次waitfor都返回1返回一表示WiFi连接但是没有网络。其实是有网络的很奇怪。解决方法这里我获取了ping时抓包的信息判断是否丢包为100%。如果为100%,就说明网络有问题。不是100%说明网络连接没问题。废话不多说直接上代码老铁双击666哈哈public boolean isNetworkOnline() {Runtime runtime Runtime.getRuntime();Process ipProcess null;try {ipProcess runtime.exec(ping -c 5 -w 4 223.5.5.5);InputStream input ipProcess.getInputStream();BufferedReader in new BufferedReader(new InputStreamReader(input));StringBuffer stringBuffer new StringBuffer();String content ;while ((content in.readLine()) ! null) {stringBuffer.append(content);}int exitValue ipProcess.waitFor();if (exitValue 0) {//WiFi连接网络正常return true;} else {if (stringBuffer.indexOf(100% packet loss) ! -1) {//网络丢包严重判断为网络未连接return false;} else {//网络未丢包判断为网络连接return true;}}} catch (IOException | InterruptedException e) {e.printStackTrace();} finally {if (ipProcess ! null) {ipProcess.destroy();}runtime.gc();}return false;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89456.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!