欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android 判断用户2G/3G/4G移动数据网络,android2g,Android 判断用户

来源: javaer 分享于  点击 29028 次 点评:195

Android 判断用户2G/3G/4G移动数据网络,android2g,Android 判断用户


Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据。

通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,如果是 mobile ,可以通过 NetworksInfo 对象的 getSubType() 和 getSubTypeName() 可以获取到对于的网络类型和名字。

网络类型和名字定义在 TelephonyManager 类里。

/** Network type is unknown */public static final int NETWORK_TYPE_UNKNOWN = 0;/** Current network is GPRS */public static final int NETWORK_TYPE_GPRS = 1;/** Current network is EDGE */public static final int NETWORK_TYPE_EDGE = 2;/** Current network is UMTS */public static final int NETWORK_TYPE_UMTS = 3;/** Current network is CDMA: Either IS95A or IS95B*/public static final int NETWORK_TYPE_CDMA = 4;/** Current network is EVDO revision 0*/public static final int NETWORK_TYPE_EVDO_0 = 5;/** Current network is EVDO revision A*/public static final int NETWORK_TYPE_EVDO_A = 6;/** Current network is 1xRTT*/public static final int NETWORK_TYPE_1xRTT = 7;/** Current network is HSDPA */public static final int NETWORK_TYPE_HSDPA = 8;/** Current network is HSUPA */public static final int NETWORK_TYPE_HSUPA = 9;/** Current network is HSPA */public static final int NETWORK_TYPE_HSPA = 10;/** Current network is iDen */public static final int NETWORK_TYPE_IDEN = 11;/** Current network is EVDO revision B*/public static final int NETWORK_TYPE_EVDO_B = 12;/** Current network is LTE */public static final int NETWORK_TYPE_LTE = 13;/** Current network is eHRPD */public static final int NETWORK_TYPE_EHRPD = 14;/** Current network is HSPA+ */public static final int NETWORK_TYPE_HSPAP = 15;

看到这个代码和注释,相信没有这方面知识的人很难看懂,都啥玩意?这注释跟没注释有啥区别?!就是让人看着更加闹心而已。所以说,注释对阅读代码的人很重 要。当然这些东西可能太专业了,写这些代码的人估计是想写也不知道该怎么了,得写多大一坨啊?!我在最后会贴上一些我整理的资料,可以供大家参考一下,不 是很详细,也不专业,就是大概有个印象。

TelephonyManager 还提供了 getNetworkTypeName(int type) 的方法,这个方法可以返回一个字符串,但是信息量不大。

那怎么判断是 2G , 3G 还是 4G 网络呢?TelephonyManager 还提供了另外一个方法,getNetworkClass(int networkType) ,但这个方法被隐藏掉了,我把代码贴一下。 publicstaticintgetNetworkClass(intnetworkType){switch(networkType){caseNETWORK_TYPE_GPRS:caseNETWORK_TYPE_EDGE:caseNETWORK_TYPE_CDMA:caseNETWORK_TYPE_1xRTT:caseNETWORK_TYPE_IDEN:returnNETWORK_CLASS_2_G;caseNETWORK_TYPE_UMTS:caseNETWORK_TYPE_EVDO_0:caseNETWORK_TYPE_EVDO_A:caseNETWORK_TYPE_HSDPA:caseNETWORK_TYPE_HSUPA:caseNETWORK_TYPE_HSPA:caseNETWORK_TYPE_EVDO_B:caseNETWORK_TYPE_EHRPD:caseNETWORK_TYPE_HSPAP:returnNETWORK_CLASS_3_G;caseNETWORK_TYPE_LTE:returnNETWORK_CLASS_4_G;default:returnNETWORK_CLASS_UNKNOWN;}}

然后下面是这几个常量的值。 /Unknownnetworkclass.[email&#160;protected]/ <![CDATA[ /!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/ ]]> /}*/publicstaticfinalintNETWORK_CLASS_UNKNOWN=0;/Classofbroadlydefined"2G"networks.[email&#160;protected]/ <![CDATA[ /!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/ ]]> /}/publicstaticfinalintNETWORK_CLASS_2_G=1;/Classofbroadlydefined"3G"networks.[email&#160;protected]/ <![CDATA[ /!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/ ]]> /}*/publicstaticfinalintNETWORK_CLASS_3_G=2;/Classofbroadlydefined"4G"networks.[email&#160;protected]/ <![CDATA[ /!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/ ]]> /}/publicstaticfinalintNETWORK_CLASS_4_G=3;

不知道为啥要把这些东西给隐藏起来,然道是不靠谱?!还是其他的更好的方式?!不知道,先这样吧,现在通过上面的手段,是可以知道用户用的是什么网络,当 然也可以区分出来用户使用的是 2G , 3G 还是 4G 了。当然,你获取到这些数据后,你也可以推算出用户用的是哪家公司的网络,移动的,联通的,还是电信的,当然,只在中国。而且虚拟运营商开始真正上市后, 这个就区分不出来是京东的,还是国美,苏宁的了,但是你可以知道你的手机号用的是联通的网还是移动的网。

最后贴上我收集整理的一些资料,可以参考一下。

GPRS 2G(2.5) General Packet Radia Service 114kbpsEDGE 2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbpsUMTS 3G WCDMA 联通3G Universal Mobile Telecommunication System 完整的3G移动通信技术标准CDMA 2G 电信 Code Division Multiple Access 码分多址EVDO_0 3G (EVDO 全程 CDMA2000 1xEV-DO) Evolution - Data Only (Data Optimized) 153.6kps - 2.4mbps 属于3GEVDO_A 3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G1xRTT 2G CDMA2000 1xRTT (RTT - 无线电传输技术) 144kbps 2G的过渡,HSDPA 3.5G 高速下行分组接入 3.5G WCDMA High Speed Downlink Packet Access 14.4mbps HSUPA 3.5G High Speed Uplink Packet Access 高速上行链路分组接入 1.4 - 5.8 mbpsHSPA 3G (分HSDPA,HSUPA) High Speed Packet Access IDEN 2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)EVDO_B 3G EV-DO Rev.B 14.7Mbps 下行 3.5GLTE 4G Long Term Evolution FDD-LTE 和 TDD-LTE , 3G过渡,升级版 LTE Advanced 才是4G EHRPD 3G CDMA2000向LTE 4G的中间产物 Evolved High Rate Packet Data HRPD的升级HSPAP 3G HSPAP 比 HSDPA 快些

转自:http://www.binkery.com/post/368.html

实例:

    import java.io.BufferedReader;      import java.io.InputStreamReader;      import java.text.DecimalFormat;      import java.util.List;      import android.content.Context;      import android.net.ConnectivityManager;      import android.net.NetworkInfo;      import android.net.wifi.WifiInfo;      import android.net.wifi.WifiManager;      import android.telephony.NeighboringCellInfo;      import android.telephony.TelephonyManager;      import android.telephony.cdma.CdmaCellLocation;      import android.telephony.gsm.GsmCellLocation;      import android.util.Log;      public class NetWorkUtil {          public static boolean isWifiAvailable() {              ConnectivityManager connectivityManager = (ConnectivityManager) ConfigManager                      .getContext().getSystemService(Context.CONNECTIVITY_SERVICE);              NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();              return (networkInfo != null &amp;&amp; networkInfo.isConnected() &amp;&amp; networkInfo                      .getType() == ConnectivityManager.TYPE_WIFI);          }          /**          * 获取MAC地址          *           * @param context          * @return          */          public static String getMacAddress(Context context) {              if (context == null) {                  return "";              }              String localMac = null;              if (isWifiAvailable()) {                  localMac = getWifiMacAddress(context);              }              if (localMac != null &amp;&amp; localMac.length() > 0) {                  localMac = localMac.replace(":", "-").toLowerCase();                  return localMac;              }              localMac = getMacFromCallCmd();              if (localMac != null) {                  localMac = localMac.replace(":", "-").toLowerCase();              }              return localMac;          }          private static String getWifiMacAddress(Context context) {              String localMac = null;              try {                  WifiManager wifi = (WifiManager) context                          .getSystemService(Context.WIFI_SERVICE);                  WifiInfo info = wifi.getConnectionInfo();                  if (wifi.isWifiEnabled()) {                      localMac = info.getMacAddress();                      if (localMac != null) {                          localMac = localMac.replace(":", "-").toLowerCase();                          return localMac;                      }                  }              } catch (Exception e) {                  e.printStackTrace();              }              return null;          }          /**          * 通过callCmd("busybox ifconfig","HWaddr")获取mac地址          *           * @attention 需要设备装有busybox工具          * @return Mac Address          */          private static String getMacFromCallCmd() {              String result = "";              result = callCmd("busybox ifconfig", "HWaddr");              if (result == null || result.length() <= 0) {                  return null;              }              DebugLog.v("tag", "cmd result : " + result);              // 对该行数据进行解析              // 例如:eth0 Link encap:Ethernet HWaddr 00:16:E8:3E:DF:67              if (result.length() > 0 &amp;&amp; result.contains("HWaddr") == true) {                  String Mac = result.substring(result.indexOf("HWaddr") + 6,                          result.length() - 1);                  if (Mac.length() > 1) {                      result = Mac.replaceAll(" ", "");                  }              }              return result;          }          public static String callCmd(String cmd, String filter) {              String result = "";              String line = "";              try {                  Process proc = Runtime.getRuntime().exec(cmd);                  InputStreamReader is = new InputStreamReader(proc.getInputStream());                  BufferedReader br = new BufferedReader(is);                  // 执行命令cmd,只取结果中含有filter的这一行                  while ((line = br.readLine()) != null                          &amp;&amp; line.contains(filter) == false) {                  }                  result = line;              } catch (Exception e) {                  e.printStackTrace();              }              return result;          }          /**          * 网络是否可用          *           * @param context          * @return          */          public static boolean IsNetWorkEnable(Context context) {              try {                  ConnectivityManager connectivity = (ConnectivityManager) context                          .getSystemService(Context.CONNECTIVITY_SERVICE);                  if (connectivity == null) {                      ToastUtil.showMessage(context, "无法连接网络");                      return false;                  }                  NetworkInfo info = connectivity.getActiveNetworkInfo();                  if (info != null &amp;&amp; info.isConnected()) {                      // 判断当前网络是否已经连接                      if (info.getState() == NetworkInfo.State.CONNECTED) {                          return true;                      }                  }              } catch (Exception e) {                  e.printStackTrace();              }              ToastUtil.showMessage(context, "无法连接网络");              return false;          }          private static final int NETWORK_TYPE_UNAVAILABLE = -1;          // private static final int NETWORK_TYPE_MOBILE = -100;          private static final int NETWORK_TYPE_WIFI = -101;          private static final int NETWORK_CLASS_WIFI = -101;          private static final int NETWORK_CLASS_UNAVAILABLE = -1;          /** Unknown network class. */          private static final int NETWORK_CLASS_UNKNOWN = 0;          /** Class of broadly defined "2G" networks. */          private static final int NETWORK_CLASS_2_G = 1;          /** Class of broadly defined "3G" networks. */          private static final int NETWORK_CLASS_3_G = 2;          /** Class of broadly defined "4G" networks. */          private static final int NETWORK_CLASS_4_G = 3;          private static DecimalFormat df = new DecimalFormat("#.##");          // 适配低版本手机          /** Network type is unknown */          public static final int NETWORK_TYPE_UNKNOWN = 0;          /** Current network is GPRS */          public static final int NETWORK_TYPE_GPRS = 1;          /** Current network is EDGE */          public static final int NETWORK_TYPE_EDGE = 2;          /** Current network is UMTS */          public static final int NETWORK_TYPE_UMTS = 3;          /** Current network is CDMA: Either IS95A or IS95B */          public static final int NETWORK_TYPE_CDMA = 4;          /** Current network is EVDO revision 0 */          public static final int NETWORK_TYPE_EVDO_0 = 5;          /** Current network is EVDO revision A */          public static final int NETWORK_TYPE_EVDO_A = 6;          /** Current network is 1xRTT */          public static final int NETWORK_TYPE_1xRTT = 7;          /** Current network is HSDPA */          public static final int NETWORK_TYPE_HSDPA = 8;          /** Current network is HSUPA */          public static final int NETWORK_TYPE_HSUPA = 9;          /** Current network is HSPA */          public static final int NETWORK_TYPE_HSPA = 10;          /** Current network is iDen */          public static final int NETWORK_TYPE_IDEN = 11;          /** Current network is EVDO revision B */          public static final int NETWORK_TYPE_EVDO_B = 12;          /** Current network is LTE */          public static final int NETWORK_TYPE_LTE = 13;          /** Current network is eHRPD */          public static final int NETWORK_TYPE_EHRPD = 14;          /** Current network is HSPA+ */          public static final int NETWORK_TYPE_HSPAP = 15;          /**          * 格式化大小          *           * @param size          * @return          */          public static String formatSize(long size) {              String unit = "B";              float len = size;              if (len > 900) {                  len /= 1024f;                  unit = "KB";              }              if (len > 900) {                  len /= 1024f;                  unit = "MB";              }              if (len > 900) {                  len /= 1024f;                  unit = "GB";              }              if (len > 900) {                  len /= 1024f;                  unit = "TB";              }              return df.format(len) + unit;          }          public static String formatSizeBySecond(long size) {              String unit = "B";              float len = size;              if (len > 900) {                  len /= 1024f;                  unit = "KB";              }              if (len > 900) {                  len /= 1024f;                  unit = "MB";              }              if (len > 900) {                  len /= 1024f;                  unit = "GB";              }              if (len > 900) {                  len /= 1024f;                  unit = "TB";              }              return df.format(len) + unit + "/s";          }          public static String format(long size) {              String unit = "B";              float len = size;              if (len > 1000) {                  len /= 1024f;                  unit = "KB";                  if (len > 1000) {                      len /= 1024f;                      unit = "MB";                      if (len > 1000) {                          len /= 1024f;                          unit = "GB";                      }                  }              }              return df.format(len) + "\n" + unit + "/s";          }          /**          * 获取运营商          *           * @return          */          public static String getProvider() {              String provider = "未知";              try {                  TelephonyManager telephonyManager = (TelephonyManager) ConfigManager                          .getContext().getSystemService(Context.TELEPHONY_SERVICE);                  String IMSI = telephonyManager.getSubscriberId();                  Log.v("tag", "getProvider.IMSI:" + IMSI);                  if (IMSI == null) {                      if (TelephonyManager.SIM_STATE_READY == telephonyManager                              .getSimState()) {                          String operator = telephonyManager.getSimOperator();                          Log.v("tag", "getProvider.operator:" + operator);                          if (operator != null) {                              if (operator.equals("46000")                                      || operator.equals("46002")                                      || operator.equals("46007")) {                                  provider = "中国移动";                              } else if (operator.equals("46001")) {                                  provider = "中国联通";                              } else if (operator.equals("46003")) {                                  provider = "中国电信";                              }                          }                      }                  } else {                      if (IMSI.startsWith("46000") || IMSI.startsWith("46002")                              || IMSI.startsWith("46007")) {                          provider = "中国移动";                      } else if (IMSI.startsWith("46001")) {                          provider = "中国联通";                      } else if (IMSI.startsWith("46003")) {                          provider = "中国电信";                      }                  }              } catch (Exception e) {                  e.printStackTrace();              }              return provider;          }          /**          * 获取网络类型          *           * @return          */          public static String getCurrentNetworkType() {              int networkClass = getNetworkClass();              String type = "未知";              switch (networkClass) {              case NETWORK_CLASS_UNAVAILABLE:                  type = "无";                  break;              case NETWORK_CLASS_WIFI:                  type = "Wi-Fi";                  break;              case NETWORK_CLASS_2_G:                  type = "2G";                  break;              case NETWORK_CLASS_3_G:                  type = "3G";                  break;              case NETWORK_CLASS_4_G:                  type = "4G";                  break;              case NETWORK_CLASS_UNKNOWN:                  type = "未知";                  break;              }              return type;          }          private static int getNetworkClassByType(int networkType) {              switch (networkType) {              case NETWORK_TYPE_UNAVAILABLE:                  return NETWORK_CLASS_UNAVAILABLE;              case NETWORK_TYPE_WIFI:                  return NETWORK_CLASS_WIFI;              case NETWORK_TYPE_GPRS:              case NETWORK_TYPE_EDGE:              case NETWORK_TYPE_CDMA:              case NETWORK_TYPE_1xRTT:              case NETWORK_TYPE_IDEN:                  return NETWORK_CLASS_2_G;              case NETWORK_TYPE_UMTS:              case NETWORK_TYPE_EVDO_0:              case NETWORK_TYPE_EVDO_A:              case NETWORK_TYPE_HSDPA:              case NETWORK_TYPE_HSUPA:              case NETWORK_TYPE_HSPA:              case NETWORK_TYPE_EVDO_B:              case NETWORK_TYPE_EHRPD:              case NETWORK_TYPE_HSPAP:                  return NETWORK_CLASS_3_G;              case NETWORK_TYPE_LTE:                  return NETWORK_CLASS_4_G;              default:                  return NETWORK_CLASS_UNKNOWN;              }          }          private static int getNetworkClass() {              int networkType = NETWORK_TYPE_UNKNOWN;              try {                  final NetworkInfo network = ((ConnectivityManager) ConfigManager                          .getContext()                          .getSystemService(Context.CONNECTIVITY_SERVICE))                          .getActiveNetworkInfo();                  if (network != null &amp;&amp; network.isAvailable()                          &amp;&amp; network.isConnected()) {                      int type = network.getType();                      if (type == ConnectivityManager.TYPE_WIFI) {                          networkType = NETWORK_TYPE_WIFI;                      } else if (type == ConnectivityManager.TYPE_MOBILE) {                          TelephonyManager telephonyManager = (TelephonyManager) ConfigManager                                  .getContext().getSystemService(                                          Context.TELEPHONY_SERVICE);                          networkType = telephonyManager.getNetworkType();                      }                  } else {                      networkType = NETWORK_TYPE_UNAVAILABLE;                  }              } catch (Exception ex) {                  ex.printStackTrace();              }              return getNetworkClassByType(networkType);          }          public static String getWifiRssi() {              int asu = 85;              try {                  final NetworkInfo network = ((ConnectivityManager) ConfigManager                          .getContext()                          .getSystemService(Context.CONNECTIVITY_SERVICE))                          .getActiveNetworkInfo();                  if (network != null &amp;&amp; network.isAvailable()                          &amp;&amp; network.isConnected()) {                      int type = network.getType();                      if (type == ConnectivityManager.TYPE_WIFI) {                          WifiManager wifiManager = (WifiManager) ConfigManager                                  .getContext()                                  .getSystemService(Context.WIFI_SERVICE);                          WifiInfo wifiInfo = wifiManager.getConnectionInfo();                          if (wifiInfo != null) {                              asu = wifiInfo.getRssi();                          }                      }                  }              } catch (Exception e) {                  e.printStackTrace();              }              return asu + "dBm";          }          public static String getWifiSsid() {              String ssid = "";              try {                  final NetworkInfo network = ((ConnectivityManager) ConfigManager                          .getContext()                          .getSystemService(Context.CONNECTIVITY_SERVICE))                          .getActiveNetworkInfo();                  if (network != null &amp;&amp; network.isAvailable()                          &amp;&amp; network.isConnected()) {                      int type = network.getType();                      if (type == ConnectivityManager.TYPE_WIFI) {                          WifiManager wifiManager = (WifiManager) ConfigManager                                  .getContext()                                  .getSystemService(Context.WIFI_SERVICE);                          WifiInfo wifiInfo = wifiManager.getConnectionInfo();                          if (wifiInfo != null) {                              ssid = wifiInfo.getSSID();                              if (ssid == null) {                                  ssid = "";                              }                              ssid = ssid.replaceAll("\"", "");                          }                      }                  }              } catch (Exception e) {                  e.printStackTrace();              }              return ssid;          }          /**          * 检查sim卡状态          *           * @param ctx          * @return          */          public static boolean checkSimState() {              TelephonyManager tm = (TelephonyManager) ConfigManager.getContext()                      .getSystemService(Context.TELEPHONY_SERVICE);              if (tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT                      || tm.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) {                  return false;              }              return true;          }          /**          * 获取imei          */          public static String getImei() {              TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager                      .getContext().getSystemService(Context.TELEPHONY_SERVICE);              String imei = mTelephonyMgr.getDeviceId();              if (imei == null) {                  imei = "000000000000000";              }              return imei;          }          public static String getPhoneImsi() {              TelephonyManager mTelephonyMgr = (TelephonyManager) ConfigManager                      .getContext().getSystemService(Context.TELEPHONY_SERVICE);              return mTelephonyMgr.getSubscriberId();          }          public static CellInfo getNetInfo() {              CellInfo info = new CellInfo();              try {                  TelephonyManager mTelephonyManager = (TelephonyManager) ConfigManager                          .getContext().getSystemService(Context.TELEPHONY_SERVICE);                  String operator = mTelephonyManager.getNetworkOperator();                  if (operator != null) {                      /** 通过operator获取 MCC 和MNC */                      if (operator.length() > 3) {                          String mcc = operator.substring(0, 3);                          String mnc = operator.substring(3);                          info.setMcc(mcc);                          info.setMnc(mnc);                      }                  }                  int lac = 0;                  int cellId = 0;                  int phoneType = mTelephonyManager.getPhoneType();                  if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {                      GsmCellLocation location = (GsmCellLocation) mTelephonyManager                              .getCellLocation();                      /** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID */                      lac = location.getLac();                      cellId = location.getCid();                  } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {                      CdmaCellLocation location = (CdmaCellLocation) mTelephonyManager                              .getCellLocation();                      lac = location.getNetworkId();                      cellId = location.getBaseStationId();                      cellId /= 16;                  }                  if (lac == 0 || cellId == 0) {                      List<NeighboringCellInfo> infos = mTelephonyManager                              .getNeighboringCellInfo();                      int lc = 0;                      int ci = 0;                      int rssi = 0;                      for (NeighboringCellInfo cell : infos) {                          // 根据邻区总数进行循环                          if (lc == 0 || ci == 0) {                              lc = cell.getLac();                              ci = cell.getCid();                              rssi = cell.getRssi();                          }                          // sb.append(" LAC : " + info.getLac());                          // // 取出当前邻区的LAC                          // sb.append(" CID : " + info.getCid());                          // // 取出当前邻区的CID                          // sb.append(" BSSS : " + (-113 + 2 * info.getRssi()) +                          // "\n"); // 获取邻区基站信号强度                      }                      rssi = -113 + 2 * rssi;                  }              } catch (Exception e) {                  e.printStackTrace();              }              return info;          }      }  
相关栏目:

用户点评