您的位置:首页 > 理论基础 > 计算机网络

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

2013-10-02 00:34 801 查看


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

分类: 移动开发 、Android、2G、3G、wifi2012-12-12
22: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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: