博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android判断用户的网络类型(2/3/4G、wifi)
阅读量:6604 次
发布时间:2019-06-24

本文共 3286 字,大约阅读时间需要 10 分钟。

很多时候需要先判断当前用户的网络才会继续之后的一些处理逻辑。但网络类型获取这一块我用我自己的的手机调试时遇到一些问题这里记录一下。

一加手机一代移动4G 网络得到的subtype类型值为17我查过Android 5.1的源码它最大的值也就为16。(

 

我拿魅族的移动4G测试的结果如下

 

小米4电信4G的测试结果如下

魅族MX4联通3G

 

还测试了其它华为移动3G/4G的情况就我自己的手机一加返回的值有点奇怪之后我查了一下它的参数

当然其它厂商华为、小米、魅族与上面显示的网络类型基本上是一致的。都是3GTD-SCDMA、WCDMA等

 

而目前测试的情况就是仅一加返回的值为17这会导致正常的判断出现问题无法识别到底使用的是何种网络。而我通过logcat的日志却很清晰的发现系统自己是能识别的

 

 

最后我根据网络上提供的资料加了一项比较特殊的判断演变成如下的代码

public static String GetNetworkType() {
    String strNetworkType = "";         NetworkInfo networkInfo = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE).getActiveNetworkInfo();     if (networkInfo != null && networkInfo.isConnected())     {
        if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI)         {
            strNetworkType = "WIFI";         }         else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE)         {
            String _strSubTypeName = networkInfo.getSubtypeName();                         Log.e("cocos2d-x", "Network getSubtypeName : " + _strSubTypeName);                         // TD-SCDMA   networkType is 17             int networkType = networkInfo.getSubtype();             switch (networkType) {
                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: //api<8 : replace by 11                     strNetworkType = "2G";                     break;                 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: //api<9 : replace by 14                 case TelephonyManager.NETWORK_TYPE_EHRPD:  //api<11 : replace by 12                 case TelephonyManager.NETWORK_TYPE_HSPAP:  //api<13 : replace by 15                     strNetworkType = "3G";                     break;                 case TelephonyManager.NETWORK_TYPE_LTE:    //api<11 : replace by 13                     strNetworkType = "4G";                     break;                 default:                     // http://baike.baidu.com/item/TD-SCDMA 中国移动 联通 电信 三种3G制式                     if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000"))                     {
                        strNetworkType = "3G";                     }                     else                     {
                        strNetworkType = _strSubTypeName;                     }                                         break;              }                          Log.e("cocos2d-x", "Network getSubtype : " + Integer.valueOf(networkType).toString());         }     }         Log.e("cocos2d-x", "Network Type : " + strNetworkType);         return strNetworkType; }

 

希望对需要的人有所帮助吧。我在网上搜索到之前其实有人提出过类似的疑问但是没有答案

telephony.getNetworkType() 这个方法为什么在有些手机里面获取的值API没有呢例如16、17。这两个在 TelephonyManager这个API里面就没有

 

 

参考链接

转载地址:http://bawso.baihongyu.com/

你可能感兴趣的文章
关于/.svn/源代码泄漏的问题
查看>>
Winetricks download
查看>>
编译型语言VS解释型语言
查看>>
Event handling for iOS - how hitTest:withEvent: and pointInside:withEvent: are related?
查看>>
Mybatis Generator 不识别主键
查看>>
Nginx 400 Bad Request | The plain HTTP request was sent to HTTPS port
查看>>
ftp指定本地用户访问的目录
查看>>
python 自定义模块的引用
查看>>
Zabbix 监控ESXi服务器【非虚拟机】CPU、内存、硬盘、网络带宽
查看>>
HTML5之SessionStorage本地存储
查看>>
error: cannot find javah找不到javah解决办法
查看>>
我的友情链接
查看>>
三种问题可能导致无线路由间歇断开网络
查看>>
MySQL的安装和使用
查看>>
lduan SCDPM 保护组与系统状态(五)
查看>>
我的友情链接
查看>>
docker command and docker file variables
查看>>
说说红黑树
查看>>
HTML --元素
查看>>
spring4 --jar包简介
查看>>