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

8727人阅读 评论(1) 收藏 举报 分类: 实习android开发之路(298)

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

分类:移动开发 、Android、2G、3G、wifi 762人阅读 评论(0) 收藏 举报

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

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

[java] view plain copy
  1. /**没有网络*/
  2. publicstaticfinalintNETWORKTYPE_INVALID=0;
  3. /**wap网络*/
  4. publicstaticfinalintNETWORKTYPE_WAP=1;
  5. /**2G网络*/
  6. publicstaticfinalintNETWORKTYPE_2G=2;
[java] view plain copy
  1. /**3G和3G以上网络,或统称为快速网络*/
  2. publicstaticfinalintNETWORKTYPE_3G=3;
[java] view plain copy
  1. /**wifi网络*/
  2. publicstaticfinalintNETWORKTYPE_WIFI=4;


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

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


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

[java] view plain copy
  1. /**
  2. *获取网络状态,wifi,wap,2g,3g.
  3. *
  4. *@paramcontext上下文
  5. *@returnint网络状态{@link#NETWORKTYPE_2G},{@link#NETWORKTYPE_3G},*{@link#NETWORKTYPE_INVALID},{@link#NETWORKTYPE_WAP}*<p>{@link#NETWORKTYPE_WIFI}
  6. */
  7. publicstaticintgetNetWorkType(Contextcontext){
  8. ConnectivityManagermanager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  9. NetworkInfonetworkInfo=manager.getActiveNetworkInfo();
  10. if(networkInfo!=null&&networkInfo.isConnected()){
  11. Stringtype=networkInfo.getTypeName();
  12. if(type.equalsIgnoreCase("WIFI")){
  13. mNetWorkType=NETWORKTYPE_WIFI;
  14. }elseif(type.equalsIgnoreCase("MOBILE")){
  15. StringproxyHost=android.net.Proxy.getDefaultHost();
  16. mNetWorkType=TextUtils.isEmpty(proxyHost)
  17. ?(isFastMobileNetwork(context)?NETWORKTYPE_3G:NETWORKTYPE_2G)
  18. :NETWORKTYPE_WAP;
  19. }
  20. }else{
  21. mNetWorkType=NETWORKTYPE_INVALID;
  22. }
  23. returnmNetWorkType;
  24. }

更多相关文章

  1. android sqlite 数据类型
  2. Android中的几种网络请求方式详解
  3. Android中的几种网络请求方式详解 .
  4. Android中的几种网络请求方式详解 .
  5. android 开发中判断网络是否连接的代码
  6. EditText 报出 “This text field does not specify an inputTyp
  7. Android常见问题总结(七)
  8. 用网络adb连接调试Android
  9. 检测Android本地存储是否有敏感信息

随机推荐

  1. 线程安全
  2. Android(安卓)面试题7
  3. android 入口activity
  4. android EditText 隐藏软键盘(输入法不显
  5. TabLayout绑定Viewpager后不显示文字
  6. Android简单自定义圆形和水平ProgressBar
  7. Android群英传第四章笔记·ListView使用
  8. 对于Fragment的总结
  9. Android(安卓)UI开发第七篇之Android(安
  10. Android(安卓)中文API (38) —— Spinner