Android如何检测网络的类型为3G、2G、wap、wifi
2013-10-02 00:34
801 查看
[置顶] Android如何检测网络的类型为3G、2G、wap、wifi
分类: 移动开发 、Android、2G、3G、wifi2012-12-1222:30 762人阅读 评论(0) 收藏 举报
关于Android如何检测网络的类型,网上代码很多,但是有用的精品不多,前段时间,因为做项目需要涉及到具体网络类型的检查,特别是区分2G网络是为wap,还是net,类型,因为wap类型,需要配置代理上网,基于此,我将自己实现的过程代码记录下来:
1、定义常量来标识几种网络类型
[java] view
plaincopyprint?
/** 没有网络 */
public static final int NETWORKTYPE_INVALID = 0;
/** wap网络 */
public static final int NETWORKTYPE_WAP = 1;
/** 2G网络 */
public static final int NETWORKTYPE_2G = 2;
[java] view
plaincopyprint?
/** 3G和3G以上网络,或统称为快速网络 */
public static final int NETWORKTYPE_3G = 3;
[java] view
plaincopyprint?
/** wifi网络 */
public static final int NETWORKTYPE_WIFI = 4;
2、判断是否是FastMobileNetWork,将3G或者3G以上的网络称为快速网络
[java] view
plaincopyprint?
private static boolean isFastMobileNetwork(Context context) {
elephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
switch (telephonyManager.getNetworkType()) {
case TelephonyManager.NETWORK_TYPE_1xRTT:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_CDMA:
return false; // ~ 14-64 kbps
case TelephonyManager.NETWORK_TYPE_EDGE:
return false; // ~ 50-100 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_0:
return true; // ~ 400-1000 kbps
case TelephonyManager.NETWORK_TYPE_EVDO_A:
return true; // ~ 600-1400 kbps
case TelephonyManager.NETWORK_TYPE_GPRS:
return false; // ~ 100 kbps
case TelephonyManager.NETWORK_TYPE_HSDPA:
return true; // ~ 2-14 Mbps
case TelephonyManager.NETWORK_TYPE_HSPA:
return true; // ~ 700-1700 kbps
case TelephonyManager.NETWORK_TYPE_HSUPA:
return true; // ~ 1-23 Mbps
case TelephonyManager.NETWORK_TYPE_UMTS:
return true; // ~ 400-7000 kbps
case TelephonyManager.NETWORK_TYPE_EHRPD:
return true; // ~ 1-2 Mbps
case TelephonyManager.NETWORK_TYPE_EVDO_B:
return true; // ~ 5 Mbps
case TelephonyManager.NETWORK_TYPE_HSPAP:
return true; // ~ 10-20 Mbps
case TelephonyManager.NETWORK_TYPE_IDEN:
return false; // ~25 kbps
case TelephonyManager.NETWORK_TYPE_LTE:
return true; // ~ 10+ Mbps
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return false;
default:
return false;
}
}
3、获取网络类型是否是2G、3G、wap、wifi等
[java] view
plaincopyprint?
/**
* 获取网络状态,wifi,wap,2g,3g.
*
* @param context 上下文
* @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G}, *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}* <p>{@link #NETWORKTYPE_WIFI}
*/
public static int getNetWorkType(Context context) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
String type = networkInfo.getTypeName();
if (type.equalsIgnoreCase("WIFI")) {
mNetWorkType = NETWORKTYPE_WIFI;
} else if (type.equalsIgnoreCase("MOBILE")) {
String proxyHost = android.net.Proxy.getDefaultHost();
mNetWorkType = TextUtils.isEmpty(proxyHost)
? (isFastMobileNetwork(context) ? NETWORKTYPE_3G : NETWORKTYPE_2G)
: NETWORKTYPE_WAP;
}
} else {
mNetWorkType = NETWORKTYPE_INVALID;
}
return mNetWorkType;
}
相关文章推荐
- Android如何检测网络的类型为3G、2G、wap、wifi .
- Android如何检测网络的类型为3G、2G、wap、wifi
- 4.2.2.5 Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- Android如何检测网络的类型为3G、2G、wap、wifi
- android如何判断当前网络类型(联网,2g,3g,wifi等)
- 判断是否联网_检测网络的类型为3G、2G、wap、wifi
- android如何判断当前网络类型(联网,2g,3g,wifi等)
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- Android网络类型判断(2g、3g、wifi)
- Android网络类型判断(2g、3g、wifi)
- Android网络类型判断(2g、3g、wifi)
- 获取Android当前网络类型(2g、3g、4g、wifi)以及手机型号、版本号
- Android网络类型判断(2g、3g、wifi)
- Android网络类型判断(2g、3g、wifi)(待续)
- Android网络类型判断(2g、3g、wifi)