android ConnectivityManager 移动网络2g 3g 4g

来源:互联网 发布:matlab解矩阵方程 编辑:程序博客网 时间:2024/04/30 08:54

android ConnectivityManager 移动网络2g 3g 4g

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

TelephonyManager.java:


/* 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;

GPRS : 2G(2.5) General Packet Radia Service 114kbps
EDGE : 2G(2.75G) Enhanced Data Rate for GSM Evolution 384kbps
UMTS : 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 属于3G
EVDO_A : 3G 1.8mbps - 3.1mbps 属于3G过渡,3.5G
1xRTT : 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 mbps
HSPA : 3G (分HSDPA,HSUPA) High Speed Packet Access
IDEN : 2G Integrated Dispatch Enhanced Networks 集成数字增强型网络 (属于2G,来自维基百科)
EVDO_B : 3G EV-DO Rev.B 14.7Mbps 下行 3.5G
LTE : 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 快些

//Added in API 1
NETWORK_TYPE_GPRS – (2.5G)移动和联通
NETWORK_TYPE_EDGE – (2.75G)2.5G到3G的过渡,移动和联通
NETWORK_TYPE_UMTS – (3G)联通
//Added in API 4
NETWORK_TYPE_CDMA – (2G 电信)
NETWORK_TYPE_EVDO_0 – (3G)电信
NETWORK_TYPE_EVDO_A – (3.5G)属于3G过渡
NETWORK_TYPE_1xRTT – (2G)
//Added in API 5
NETWORK_TYPE_HSDPA – (3.5G)
NETWORK_TYPE_HSUPA – (3.5G)
NETWORK_TYPE_HSPA – (3G)联通
//Added in API 8
NETWORK_TYPE_IDEN – (2G)
//Added in API 9
NETWORK_TYPE_EVDO_B – 3G-3.5G
//Added in API 11
NETWORK_TYPE_LTE – (4G)
NETWORK_TYPE_EHRPD – 3G(3G到4G的升级产物)
//Added in API 13
NETWORK_TYPE_HSPAP(HSPA+) – (3G)

//检测当前网络  private static String getNetworkType(Context context) {       String strNetworkType = "";       ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);       NetworkInfo networkInfo = cm.getActiveNetworkInfo();       if(networkInfo != null && networkInfo.isConnected()) {          if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {             strNetworkType = "WIFI";              return strNetworkType;          } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {  // 获取类型 MOBILE           String _strSubTypeName = networkInfo.getSubtypeName(); // 网络子类型名字              int networkType = networkInfo.getSubtype(); // 获取网络子类型           switch (networkType) {                  case TelephonyManager.NETWORK_TYPE_GPRS: //移动和联通的2G为GPRS或EGDE                case TelephonyManager.NETWORK_TYPE_EDGE:                  case TelephonyManager.NETWORK_TYPE_CDMA: //电信的2G为CDMA                 case TelephonyManager.NETWORK_TYPE_1xRTT:                  case TelephonyManager.NETWORK_TYPE_IDEN: //api<8 : replace by 11                       strNetworkType = "2G";                        break;                      case TelephonyManager.NETWORK_TYPE_UMTS:   //联通的3G为UMTS或HSDPA                 case TelephonyManager.NETWORK_TYPE_EVDO_0: //电信的3G为EVDO                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:  //api = 13, Constant Value: 15                      strNetworkType = "3G";                       break;                  case TelephonyManager.NETWORK_TYPE_LTE:    //LTE为4G, api = 11, Constant Value: 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.d("getNetworkType", "TelephonyManager.NETWORK_TYPE : " + networkType);          }       }       Log.d("getNetworkType", "Network Type : " + strNetworkType);       return strNetworkType;  }  // 获取运营商 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;  } 
原创粉丝点击