欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  很多时候需要先判断当前用户的网络,才会继续之后的一些处理逻辑。但网络类型获取这一块,我用我自己的的手机调试时遇到一些问题,这里记录一下。
 
  
 
  一加手机一代,移动4G网络,得到的subtype类型值为17,我查过Android5.1的源码,它最大的值也就为16。(点击这里在线查看源码>>)
 
  我拿魅族的移动4G测试的结果如下:
 
  
 
  小米4,电信4G的测试结果如下:
 
  
 
  
 
  魅族MX4,联通3G
 
  
 
  还测试了其它华为移动3G/4G的情况,就我自己的手机一加返回的值有点奇怪,之后我查了一下它的参数:http://detail.zol.com.cn/374/373908/param.shtml
 
  当然,其它厂商:华为、小米、魅族与上面显示的网络类型基本上是一致的。都是3G:TD-SCDMA、WCDMA等
 
  而目前测试的情况就是仅一加返回的值为17,这会导致正常的判断出现问题,无法识别到底使用的是何种网络。而我通过logcat的日志,却很清晰的发现系统自己是能识别的
 
  
 
  最后我根据网络上提供的资料,加了一项比较特殊的判断,演变成如下的代码:
 
  publicstaticStringGetNetworkType()
 
  {
 
  StringstrNetworkType="";
 
  NetworkInfonetworkInfo=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE).getActiveNetworkInfo();
 
  if(networkInfo!=null&&networkInfo.isConnected())
 
  {
 
  if(networkInfo.getType()==ConnectivityManager.TYPE_WIFI)
 
  {
 
  strNetworkType="WIFI";
 
  }
 
  elseif(networkInfo.getType()==ConnectivityManager.TYPE_MOBILE)
 
  {
 
  String_strSubTypeName=networkInfo.getSubtypeName();
 
  Log.e("cocos2d-x","NetworkgetSubtypeName:"+_strSubTypeName);
 
  //TD-SCDMAnetworkTypeis17
 
  intnetworkType=networkInfo.getSubtype();
 
  switch(networkType){
 
  caseTelephonyManager.NETWORK_TYPE_GPRS:
 
  caseTelephonyManager.NETWORK_TYPE_EDGE:
 
  caseTelephonyManager.NETWORK_TYPE_CDMA:
 
  caseTelephonyManager.NETWORK_TYPE_1xRTT:
 
  caseTelephonyManager.NETWORK_TYPE_IDEN://api<8:replaceby11
 
  strNetworkType="2G";
 
  break;
 
  caseTelephonyManager.NETWORK_TYPE_UMTS:
 
  caseTelephonyManager.NETWORK_TYPE_EVDO_0:
 
  caseTelephonyManager.NETWORK_TYPE_EVDO_A:
 
  caseTelephonyManager.NETWORK_TYPE_HSDPA:
 
  caseTelephonyManager.NETWORK_TYPE_HSUPA:
 
  caseTelephonyManager.NETWORK_TYPE_HSPA:
 
  caseTelephonyManager.NETWORK_TYPE_EVDO_B://api<9:replaceby14
 
  caseTelephonyManager.NETWORK_TYPE_EHRPD://api<11:replaceby12
 
  caseTelephonyManager.NETWORK_TYPE_HSPAP://api<13:replaceby15
 
  strNetworkType="3G";
 
  break;
 
  caseTelephonyManager.NETWORK_TYPE_LTE://api<11:replaceby13
 
  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","NetworkgetSubtype:"+Integer.valueOf(networkType).toString());
 
  }
 
  }
 
  Log.e("cocos2d-x","NetworkType:"+strNetworkType);
 
  returnstrNetworkType;
 
  }
 
  希望对需要的人有所帮助吧。我在网上搜索到,之前其实有人提出过类似的疑问,但是没有答案:
 
  telephony.getNetworkType()这个方法为什么在有些手机里面获取的值API没有呢,例如16、17。这两个在TelephonyManager这个API里面就没有

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56664.shtml