Android如何检测网络的类型为3G、2G、wap、wifi

转载地址: http://blog.csdn.net/nanzhiwen666/article/details/8288433

关于Android如何检测网络的类型,网上代码很多,但是有用的精品不多,前段时间,因为做项目需要涉及到具体网络类型的检查,特别是区分2G网络是为wap,还是net,类型,因为wap类型,需要配置代理上网,基于此,我将自己实现的过程代码记录下来:

  1、定义常量来标识几种网络类型

 

[java]  view plain copy print ?
  1. /** 没有网络 */  
  2. public static final int NETWORKTYPE_INVALID = 0;  
  3. /** wap网络 */  
  4. public static final int NETWORKTYPE_WAP = 1;  
  5. /** 2G网络 */  
  6. public static final int NETWORKTYPE_2G = 2;  
[java]  view plain copy print ?
  1. /** 3G和3G以上网络,或统称为快速网络 */  
  2. public static final int NETWORKTYPE_3G = 3;  
[java]  view plain copy print ?
  1. /** wifi网络 */  
  2. public static final int NETWORKTYPE_WIFI = 4;  


2、判断是否是FastMobileNetWork,将3G或者3G以上的网络称为快速网络

[java]  view plain copy print ?
  1. private static boolean isFastMobileNetwork(Context context) {  
  2. elephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);  
  3. switch (telephonyManager.getNetworkType()) {  
  4.        case TelephonyManager.NETWORK_TYPE_1xRTT:  
  5.            return false// ~ 50-100 kbps  
  6.        case TelephonyManager.NETWORK_TYPE_CDMA:  
  7.            return false// ~ 14-64 kbps  
  8.        case TelephonyManager.NETWORK_TYPE_EDGE:  
  9.            return false// ~ 50-100 kbps  
  10.        case TelephonyManager.NETWORK_TYPE_EVDO_0:  
  11.            return true// ~ 400-1000 kbps  
  12.        case TelephonyManager.NETWORK_TYPE_EVDO_A:  
  13.            return true// ~ 600-1400 kbps  
  14.        case TelephonyManager.NETWORK_TYPE_GPRS:  
  15.            return false// ~ 100 kbps  
  16.        case TelephonyManager.NETWORK_TYPE_HSDPA:  
  17.            return true// ~ 2-14 Mbps  
  18.        case TelephonyManager.NETWORK_TYPE_HSPA:  
  19.            return true// ~ 700-1700 kbps  
  20.        case TelephonyManager.NETWORK_TYPE_HSUPA:  
  21.            return true// ~ 1-23 Mbps  
  22.        case TelephonyManager.NETWORK_TYPE_UMTS:  
  23.            return true// ~ 400-7000 kbps  
  24.        case TelephonyManager.NETWORK_TYPE_EHRPD:  
  25.            return true// ~ 1-2 Mbps  
  26.        case TelephonyManager.NETWORK_TYPE_EVDO_B:  
  27.            return true// ~ 5 Mbps  
  28.        case TelephonyManager.NETWORK_TYPE_HSPAP:  
  29.            return true// ~ 10-20 Mbps  
  30.        case TelephonyManager.NETWORK_TYPE_IDEN:  
  31.            return false// ~25 kbps  
  32.        case TelephonyManager.NETWORK_TYPE_LTE:  
  33.            return true// ~ 10+ Mbps  
  34.        case TelephonyManager.NETWORK_TYPE_UNKNOWN:  
  35.            return false;  
  36.        default:  
  37.            return false;  
  38.     }  
  39. }  


 3、获取网络类型是否是2G、3G、wap、wifi等

[java]  view plain copy print ?
  1. /** 
  2.      * 获取网络状态,wifi,wap,2g,3g. 
  3.      * 
  4.      * @param context 上下文 
  5.      * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G},          *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}* <p>{@link #NETWORKTYPE_WIFI} 
  6.      */  
  7.   
  8.     public static int getNetWorkType(Context context) {  
  9.   
  10.         ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
  11.         NetworkInfo networkInfo = manager.getActiveNetworkInfo();  
  12.   
  13.         if (networkInfo != null && networkInfo.isConnected()) {  
  14.             String type = networkInfo.getTypeName();  
  15.   
  16.             if (type.equalsIgnoreCase("WIFI")) {  
  17.                 mNetWorkType = NETWORKTYPE_WIFI;  
  18.             } else if (type.equalsIgnoreCase("MOBILE")) {  
  19.                 String proxyHost = android.net.Proxy.getDefaultHost();  
  20.   
  21.                 mNetWorkType = TextUtils.isEmpty(proxyHost)  
  22.                         ? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G)  
  23.                         : NETWORKTYPE_WAP;  
  24.             }  
  25.         } else {  
  26.             mNetWorkType = NETWORKTYPE_INVALID;  
  27.         }  
  28.   
  29.         return mNetWorkType;  
  30.     }   

你可能感兴趣的:(Android如何检测网络的类型为3G、2G、wap、wifi)