判断网络是否可用以及当前手机的网络类型

前言


  1. android的入门开发教程最近都没怎么更新,实在是抱歉,主要是最近公司的项目赶,实在是抽不出时间来写,但最近一定会补上。公司一直都没有配电脑,没办法,一个字:穷!我之前一直都用的我用了5年的华硕电脑,但是编译项目实在是太卡了。我实在是忍不了了。所以上个星期我新换了电脑,1w5的mac,真是贵。辛辛苦苦攒了大半年的工资,上一个月就全部被我败完了。- -真是罪过,罪过。不过换了mac我感觉我的工作效率提升了不少。所以我感觉这投资还是值得的,为自己投资嘛!呸,又扯远了!

  2. 前几天产品说了一个需求,需要在登陆页面的时候判断一下网络类型,这个问题我在之前的项目中遇到过,当时也没怎么想,所以就直接去百度搜来了粘贴上去了,这次又遇到了这样一个功能,于是又打算去百度搜。但是想了想,觉得总这样也不是个办法,所以自己就花时间总结了一下,顺便也完善了一下自己的几个工具类!

  3. 关于网络这方面的问题,我们可以使用的系统管理器有两个,TelephonyManager和ConnectivityManager, 前者主要是判断网络的类型,而后者主要是判断是否连接!例如我们在ConnectivityManager中判断网络类型常用的api主要有如下两种,不是wifi就是手机网络:

  1. ConnectivityManager.TYPE_MOBILE –>手机网络类型为手机的网络
  2. ConnectivityManager.TYPE_WIFI –>手机网络类型为wifi
  3. 当然ConnectivityManager可以判断的连接类型还有很多,比如蓝牙连接等。有兴趣的小伙伴可以查一查ConnectivityManager中其他的连接类型。这里我就不过多叙述了。
  4. ConnectivityManager.TYPE_BLUETOOTH —>蓝牙连接

关于获取网络是否可用的问题

//判断网络是否可用
public static boolean isNetworkConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnected();
}    
备注:
  1. 如果仅仅是用来判断网络连接,则可以使用 cm.getActiveNetworkInfo().isAvailable();
  2. 需要添加访问网络状态权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    

判断当前的网络类型,可判断wifi类型,2G,3G以及4G类型

   // 判断网络类型
public static String getNetWorkType(Context context){
    String netWorkState = "";
    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
    ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE));
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if(networkInfo != null && networkInfo.isAvailable()){
        if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){
            //网络状态为wifi
            netWorkState = "WIFI";
            return netWorkState;
        }
        else if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
            //网络状态为手机
            //判断手机网络是2g , 3g, 以及4g
            //String subtypeName = networkInfo.getSubtypeName();
            //System.out.println("网络类型: subtypeName:" + subtypeName);
            //这里我根据的是电话管理器中的类型来进行判断,
            //当然你也可以根据subtuypeName来判断,这个是从连接管理器中拿到的
            int type = telephonyManager.getNetworkType();
            System.out.println("网络类型: type:" + type);
            switch (type){
                case TelephonyManager.NETWORK_TYPE_GPRS:
                case TelephonyManager.NETWORK_TYPE_EDGE:
                case TelephonyManager.NETWORK_TYPE_CDMA:
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    netWorkState = "2G";
                    return netWorkState;
                case TelephonyManager.NETWORK_TYPE_UMTS:
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                case TelephonyManager.NETWORK_TYPE_EVDO_A:
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                case TelephonyManager.NETWORK_TYPE_HSPA:
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                case TelephonyManager.NETWORK_TYPE_EHRPD:
                case TelephonyManager.NETWORK_TYPE_HSPAP:
                    netWorkState = "3G";
                    return netWorkState;
                case TelephonyManager.NETWORK_TYPE_LTE:
                    netWorkState = "4G";
                    return netWorkState;
                case TelephonyManager.NETWORK_TYPE_UNKNOWN:
                default:
                    netWorkState = "unknown network type";
                    return netWorkState;

            }

        }
    }
    return "";
}

总结

该封装的我已经都封装好了,我也测试了部分机器,我自己的手机和公司的测试机都能够识别所属网络类型,我觉得这个工具类应该可以满足大部分情况了,当然我自己也有考虑不周全的情况,如果发现了错误,请各位大神不吝指正,万分感谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值