首页 > 系统 > Android > 正文

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

2019-10-24 20:31:18
字体:
来源:转载
供稿:网友
这篇文章主要介绍了Android判断用户的网络类型实例,用户的网络类型分为2G、3G、4G、wifi,通过Android如何判断用户的网络类型,本文为大家揭晓
 

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

魅族MX4,联通3G

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

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

Android判断用户的网络类型实例讲解(2/3/4G、wifi)

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

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;}

以上就是本文的全部内容,希望对大家准确判断用户的网络类型有所帮助。



注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表