守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2816|回复: 0

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

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52623
    钢镚
    1422

    开源英雄守望者

    发表于 2015-8-6 09:46:12 | 显示全部楼层 |阅读模式

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

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


    1. /** 没有网络 */  
    2.                 public static var NETWORKTYPE_INVALID:int = 0;  
    3.                 /** wifi网络 */
    4.                 public static var NETWORKTYPE_WIFI:int = 1;  
    5.                 /** wap网络 */  
    6.                 public static var NETWORKTYPE_WAP:int = 2;  
    7.                 /** 2G网络 */   
    8.                 public static var NETWORKTYPE_2G:int = 3;  
    9.                 /** 3G,或统称为快速网络 */  
    10.                 public static var NETWORKTYPE_3G:int = 4;  
    11.                 /** 4G,或统称为快速网络 */  
    12.                 public static var NETWORKTYPE_4G:int = 5;
    复制代码
    2、检查网络类型  (NETWORK_TYPE_UNKNOWN   就当是  4G网络了)


    1. private int checkType(Context context)
    2.         {
    3.                 SIMCardInfo siminfo = new SIMCardInfo(context);  
    4.         
    5.         int type = siminfo.getNetworkType();
    6.                 switch (type) {  
    7.                case TelephonyManager.NETWORK_TYPE_1xRTT:  
    8.                    return NETWORKTYPE_2G; // ~ 50-100 kbps  
    9.                case TelephonyManager.NETWORK_TYPE_CDMA:  
    10.                    return NETWORKTYPE_2G; // ~ 14-64 kbps  
    11.                case TelephonyManager.NETWORK_TYPE_EDGE:  
    12.                    return NETWORKTYPE_2G; // ~ 50-100 kbps  
    13.                case TelephonyManager.NETWORK_TYPE_EVDO_0:  
    14.                    return NETWORKTYPE_3G; // ~ 400-1000 kbps  
    15.                case TelephonyManager.NETWORK_TYPE_EVDO_A:  
    16.                    return NETWORKTYPE_3G; // ~ 600-1400 kbps  
    17.                case TelephonyManager.NETWORK_TYPE_GPRS:  
    18.                    return NETWORKTYPE_2G; // ~ 100 kbps  
    19.                case TelephonyManager.NETWORK_TYPE_HSDPA:  
    20.                    return NETWORKTYPE_3G; // ~ 2-14 Mbps  
    21.                case TelephonyManager.NETWORK_TYPE_HSPA:  
    22.                    return NETWORKTYPE_3G; // ~ 700-1700 kbps  
    23.                case TelephonyManager.NETWORK_TYPE_HSUPA:  
    24.                    return NETWORKTYPE_3G; // ~ 1-23 Mbps  
    25.                case TelephonyManager.NETWORK_TYPE_UMTS:  
    26.                    return NETWORKTYPE_3G; // ~ 400-7000 kbps  
    27.                case TelephonyManager.NETWORK_TYPE_EHRPD:  
    28.                    return NETWORKTYPE_3G; // ~ 1-2 Mbps  
    29.                case TelephonyManager.NETWORK_TYPE_EVDO_B:  
    30.                    return NETWORKTYPE_3G; // ~ 5 Mbps  
    31.                case TelephonyManager.NETWORK_TYPE_HSPAP:  
    32.                    return NETWORKTYPE_3G; // ~ 10-20 Mbps  
    33.                case TelephonyManager.NETWORK_TYPE_IDEN:  
    34.                    return NETWORKTYPE_2G; // ~25 kbps  
    35.                case TelephonyManager.NETWORK_TYPE_LTE:  
    36.                    return NETWORKTYPE_4G; // ~ 10+ Mbps  
    37.                case TelephonyManager.NETWORK_TYPE_UNKNOWN:  
    38.                    return NETWORKTYPE_4G;  
    39.                default:  
    40.                    return NETWORKTYPE_INVALID;  
    41.             }  
    42.         }
    复制代码

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


    1. private int getNetWorkType(Context context) {  
    2.                   
    3.         ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
    4.         NetworkInfo networkInfo = manager.getActiveNetworkInfo();  
    5.   
    6.         int mNetWorkType = 0;
    7.         if (networkInfo != null && networkInfo.isConnected()) {  
    8.             String type = networkInfo.getTypeName();  
    9.   
    10.             if (type.equalsIgnoreCase("WIFI")) {  
    11.                 mNetWorkType = NETWORKTYPE_WIFI;  
    12.             } else if (type.equalsIgnoreCase("MOBILE")) {  
    13. //                String proxyHost = android.net.Proxy.getDefaultHost();  // 验证是否为 WAP 网络
    14.   
    15.                 mNetWorkType = checkType(context);
    16.             }  
    17.         } else {  
    18.             mNetWorkType = NETWORKTYPE_INVALID;  
    19.         }  
    20.   
    21.         return mNetWorkType;  
    22.     }   
    23.        
    复制代码


    5.初始化函数:


    1. @Override
    2.         public FREObject call(FREContext arg0, FREObject[] arg1) {
    3.                 FREObject result = null;
    4.                 try {
    5.                         Context context = arg0.getActivity();//用来取得AIR程序中的Context对象  
    6.                 
    7.                 
    8.                 result = FREObject.newObject(getNetWorkType(context));
    9.                 } catch (FREWrongThreadException e) {
    10.                         // TODO Auto-generated catch block
    11.                         e.printStackTrace();
    12.                 }
    13.                 return result;
    14.         }
    复制代码

    参考资料:


    http://blog.csdn.net/nanzhiwen666/article/details/8288433


    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2024-3-29 19:53 , Processed in 0.088180 second(s), 37 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表