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

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;  
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值