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 开发中判断网络是否连接的代码
  2. 用网络adb连接调试Android
  3. Android实现透明式状态栏
  4. Android:ImageView如何显示网络图片
  5. Android开发实践 网络通信 URL、URLConnection、HttpClient

随机推荐

  1. APP测试面试题要点
  2. Android应用借助LinearLayout实现垂直水
  3. Android:Error:不允许有匹配 "[xX][mM][lL
  4. 【android】类似微信底部按钮标签实现
  5. Android(安卓)网络请求框架Volley实例详
  6. 关于Android(安卓)SQLite3多线程并发问题
  7. android 内存分析工具--001
  8. Android(安卓)Studio 奇技淫巧
  9. Android常用固件修改
  10. 在Mac下编译Android源码