关于Android如何检测网络的类型,网上代码很多,但是有用的精品不多,前段时间,因为做项目需要涉及到具体网络类型的检查,特别是区分2G网络是为wap,还是net,类型,因为wap类型,需要配置代理上网,基于此,我将自己实现的过程代码记录下来: 1、定义常量来标识几种网络类型
- /** 没有网络 */
- public static var NETWORKTYPE_INVALID:int = 0;
- /** wifi网络 */
- public static var NETWORKTYPE_WIFI:int = 1;
- /** wap网络 */
- public static var NETWORKTYPE_WAP:int = 2;
- /** 2G网络 */
- public static var NETWORKTYPE_2G:int = 3;
- /** 3G,或统称为快速网络 */
- public static var NETWORKTYPE_3G:int = 4;
- /** 4G,或统称为快速网络 */
- public static var NETWORKTYPE_4G:int = 5;
复制代码 2、检查网络类型 (NETWORK_TYPE_UNKNOWN 就当是 4G网络了)
- private int checkType(Context context)
- {
- SIMCardInfo siminfo = new SIMCardInfo(context);
-
- int type = siminfo.getNetworkType();
- switch (type) {
- case TelephonyManager.NETWORK_TYPE_1xRTT:
- return NETWORKTYPE_2G; // ~ 50-100 kbps
- case TelephonyManager.NETWORK_TYPE_CDMA:
- return NETWORKTYPE_2G; // ~ 14-64 kbps
- case TelephonyManager.NETWORK_TYPE_EDGE:
- return NETWORKTYPE_2G; // ~ 50-100 kbps
- case TelephonyManager.NETWORK_TYPE_EVDO_0:
- return NETWORKTYPE_3G; // ~ 400-1000 kbps
- case TelephonyManager.NETWORK_TYPE_EVDO_A:
- return NETWORKTYPE_3G; // ~ 600-1400 kbps
- case TelephonyManager.NETWORK_TYPE_GPRS:
- return NETWORKTYPE_2G; // ~ 100 kbps
- case TelephonyManager.NETWORK_TYPE_HSDPA:
- return NETWORKTYPE_3G; // ~ 2-14 Mbps
- case TelephonyManager.NETWORK_TYPE_HSPA:
- return NETWORKTYPE_3G; // ~ 700-1700 kbps
- case TelephonyManager.NETWORK_TYPE_HSUPA:
- return NETWORKTYPE_3G; // ~ 1-23 Mbps
- case TelephonyManager.NETWORK_TYPE_UMTS:
- return NETWORKTYPE_3G; // ~ 400-7000 kbps
- case TelephonyManager.NETWORK_TYPE_EHRPD:
- return NETWORKTYPE_3G; // ~ 1-2 Mbps
- case TelephonyManager.NETWORK_TYPE_EVDO_B:
- return NETWORKTYPE_3G; // ~ 5 Mbps
- case TelephonyManager.NETWORK_TYPE_HSPAP:
- return NETWORKTYPE_3G; // ~ 10-20 Mbps
- case TelephonyManager.NETWORK_TYPE_IDEN:
- return NETWORKTYPE_2G; // ~25 kbps
- case TelephonyManager.NETWORK_TYPE_LTE:
- return NETWORKTYPE_4G; // ~ 10+ Mbps
- case TelephonyManager.NETWORK_TYPE_UNKNOWN:
- return NETWORKTYPE_4G;
- default:
- return NETWORKTYPE_INVALID;
- }
- }
复制代码
3、获取网络类型是否是2G、3G、wap、wifi等
- private int getNetWorkType(Context context) {
-
- ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = manager.getActiveNetworkInfo();
-
- int mNetWorkType = 0;
- 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(); // 验证是否为 WAP 网络
-
- mNetWorkType = checkType(context);
- }
- } else {
- mNetWorkType = NETWORKTYPE_INVALID;
- }
-
- return mNetWorkType;
- }
-
复制代码
5.初始化函数:
- @Override
- public FREObject call(FREContext arg0, FREObject[] arg1) {
- FREObject result = null;
- try {
- Context context = arg0.getActivity();//用来取得AIR程序中的Context对象
-
-
- result = FREObject.newObject(getNetWorkType(context));
- } catch (FREWrongThreadException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return result;
- }
复制代码
参考资料:
http://blog.csdn.net/nanzhiwen666/article/details/8288433
|