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

清疚 2022-05-30 00:14 239阅读 0赞

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

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

[java] view plain copy

  1. /** 没有网络 */
  2. publicstaticfinalint NETWORKTYPE_INVALID = 0;
  3. /** wap网络 */
  4. publicstaticfinalint NETWORKTYPE_WAP = 1;
  5. /** 2G网络 */
  6. publicstaticfinalint NETWORKTYPE_2G = 2;

[java] view plain copy

  1. /** 3G和3G以上网络,或统称为快速网络 */
  2. publicstaticfinalint NETWORKTYPE_3G = 3;

[java] view plain copy

  1. /** wifi网络 */
  2. publicstaticfinalint NETWORKTYPE_WIFI = 4;

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

[java] view plain copy

  1. privatestaticboolean isFastMobileNetwork(Context context) {
  2. elephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
  3. switch (telephonyManager.getNetworkType()) {
  4. case TelephonyManager.NETWORK_TYPE_1xRTT:
  5. returnfalse; // ~ 50-100 kbps
  6. case TelephonyManager.NETWORK_TYPE_CDMA:
  7. returnfalse; // ~ 14-64 kbps
  8. case TelephonyManager.NETWORK_TYPE_EDGE:
  9. returnfalse; // ~ 50-100 kbps
  10. case TelephonyManager.NETWORK_TYPE_EVDO_0:
  11. returntrue; // ~ 400-1000 kbps
  12. case TelephonyManager.NETWORK_TYPE_EVDO_A:
  13. returntrue; // ~ 600-1400 kbps
  14. case TelephonyManager.NETWORK_TYPE_GPRS:
  15. returnfalse; // ~ 100 kbps
  16. case TelephonyManager.NETWORK_TYPE_HSDPA:
  17. returntrue; // ~ 2-14 Mbps
  18. case TelephonyManager.NETWORK_TYPE_HSPA:
  19. returntrue; // ~ 700-1700 kbps
  20. case TelephonyManager.NETWORK_TYPE_HSUPA:
  21. returntrue; // ~ 1-23 Mbps
  22. case TelephonyManager.NETWORK_TYPE_UMTS:
  23. returntrue; // ~ 400-7000 kbps
  24. case TelephonyManager.NETWORK_TYPE_EHRPD:
  25. returntrue; // ~ 1-2 Mbps
  26. case TelephonyManager.NETWORK_TYPE_EVDO_B:
  27. returntrue; // ~ 5 Mbps
  28. case TelephonyManager.NETWORK_TYPE_HSPAP:
  29. returntrue; // ~ 10-20 Mbps
  30. case TelephonyManager.NETWORK_TYPE_IDEN:
  31. returnfalse; // ~25 kbps
  32. case TelephonyManager.NETWORK_TYPE_LTE:
  33. returntrue; // ~ 10+ Mbps
  34. case TelephonyManager.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. * @param context 上下文
  5. * @return int 网络状态 {@link #NETWORKTYPE_2G},{@link #NETWORKTYPE_3G}, *{@link #NETWORKTYPE_INVALID},{@link #NETWORKTYPE_WAP}*

    {@link #NETWORKTYPE_WIFI}

  6. */
  7. publicstaticint getNetWorkType(Context context) {
  8. ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  9. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  10. if (networkInfo != null && networkInfo.isConnected()) {
  11. String type = networkInfo.getTypeName();
  12. if (type.equalsIgnoreCase(“WIFI”)) {
  13. mNetWorkType = NETWORKTYPE_WIFI;
  14. } elseif (type.equalsIgnoreCase(“MOBILE”)) {
  15. String proxyHost = 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. return mNetWorkType;
  24. }

发表评论

表情:
评论列表 (有 0 条评论,239人围观)

还没有评论,来说两句吧...

相关阅读

    相关 3G系列2

    什么是3G牌照 无线通信与国际互联网等多媒体通信结合的新一代移动通信系统的经营许可权。就好比各行业的营业执照一样,得有国家有关部门许可才可经营此业务 为什么要发3