Android判断当前网络是否可用(数据流量是否连通)

判断当前网络是否通畅,是android开发中常见的一个问题。但是网上流传的通过NetworkInfo获取网络状态的方法,根本无法判断当前数据流量是否连通。这里就给大家提供两个方法,判断当前网络是否可用。

1.ping(通用方法)

ping网址是最最常用的一种判断网络的方式,也是通用方法。这种方法最大的劣势是,耗时很长,我曾计算过,ping一次的时间大约是10s,两次是11s,每增加一次就多耗时1s。虽然这种方法耗时较长,但这是目前最常用的方法,而且没有更好的方法取代。

   /**
     * 判断当前网络是否可用(通用方法)
     * 耗时12秒
     * @return
     */
    public static boolean isNetPingUsable(){
        Runtime runtime = Runtime.getRuntime();
        try {
            Process process = runtime.exec("ping -c 3 www.baidu.com");
            int ret = process.waitFor();
            if (ret == 0){
                return true;
            }else {
                return false;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

2.NetworkCapabilities类(6.0以上)

NetworkCapabilities是API 21新增加的一个工具类,这类本身没有太多内容,主要是用来描述网络状态和传输类型,具体的内容请查阅相关文档,这里就不多介绍了。NetworkCapabilities提供了方法,用来判断当前网络是否可用,而且是不耗时的方法。

   /**
     * 判断当前网络是否可用(6.0以上版本)
     * 实时
     * @param context
     * @return
     */
    public static boolean isNetSystemUsable(Context context){
        boolean isNetUsable = false;
        ConnectivityManager manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            NetworkCapabilities networkCapabilities =
                    manager.getNetworkCapabilities(manager.getActiveNetwork());
            isNetUsable = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
        }
        return isNetUsable;
    }

虽然现在主流手机系统都是6.0以上,但是总有一些“老爷机”还坚挺的使用5.0甚至是4.4以上的系统。为了适配问题,方法1依然是主流的方法,这也是Android开发最麻烦的地方。


另外,ping的方法可以判断当前网络的可用情况。

process.waitFor() 返回0,当前网络可用
process.waitFor() 返回1,需要网页认证的wifi
process.waitFor() 返回2,当前网络不可用


关于需要网页认证的wifi,这里多说一句。

警惕360wifi!!!

360wifi本身其实是不需要认证的,连接上网络之后就可以直接使用。但是用方法进行判断时,process.waitFor()返回的却是1。有一些手机系统(比如我的魅族),在监测到当前wifi需要网页认证时,会自动打开浏览器。这本身是一个很人性化的设计,然而会被某些企业利用,在连接上wifi之后,自动跳转到广告页面。

所以大家如果用360wifi进行验证,自求多福,那毕竟是360啊。

最后给出工具类NetUtils.java







  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值