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