android 网络实时监听网络状态变化 及 网络类型判断

举报
再见孙悟空_ 发表于 2022/01/13 23:21:33 2022/01/13
【摘要】 android 中 我们经常需要判断 各种网络类型   然后需要给用户做出相应的提示,一般网络类型有 2g ,3g,4g ,wifi,无网络等等。 1. 网络类型判断 TelephonyManager 中 定义常量值   public static final int NETWORK_TYPE...

android 中 我们经常需要判断 各种网络类型   然后需要给用户做出相应的提示,一般网络类型有 2g ,3g,4g ,wifi,无网络等等。

1. 网络类型判断

TelephonyManager 中 定义常量值

 

   
  1. public static final int NETWORK_TYPE_1xRTT = 7;
  2. public static final int NETWORK_TYPE_CDMA = 4;
  3. public static final int NETWORK_TYPE_EDGE = 2;
  4. public static final int NETWORK_TYPE_EHRPD = 14;
  5. public static final int NETWORK_TYPE_EVDO_0 = 5;
  6. public static final int NETWORK_TYPE_EVDO_A = 6;
  7. public static final int NETWORK_TYPE_EVDO_B = 12;
  8. public static final int NETWORK_TYPE_GPRS = 1;
  9. public static final int NETWORK_TYPE_HSDPA = 8;
  10. public static final int NETWORK_TYPE_HSPA = 10;
  11. public static final int NETWORK_TYPE_HSPAP = 15;
  12. public static final int NETWORK_TYPE_HSUPA = 9;
  13. public static final int NETWORK_TYPE_IDEN = 11;
  14. public static final int NETWORK_TYPE_LTE = 13;
  15. public static final int NETWORK_TYPE_UMTS = 3;
  16. public static final int NETWORK_TYPE_UNKNOWN = 0;

 

   
  1. public static int getNetworkType(Context context) {
  2. ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(
  3. Context.CONNECTIVITY_SERVICE);
  4. NetworkInfo info = connectMgr.getActiveNetworkInfo();
  5. if (info != null) {
  6. if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
  7. switch (info.getSubtype()) {
  8. case TelephonyManager.NETWORK_TYPE_CDMA: // telcom
  9. case TelephonyManager.NETWORK_TYPE_1xRTT: // telecom
  10. case TelephonyManager.NETWORK_TYPE_GPRS: // unicom
  11. case TelephonyManager.NETWORK_TYPE_EDGE: // cmcc
  12. return NETWORK_TYPE_2G;
  13. case TelephonyManager.NETWORK_TYPE_EHRPD: // telecom
  14. case TelephonyManager.NETWORK_TYPE_EVDO_0: // telecom
  15. case TelephonyManager.NETWORK_TYPE_EVDO_A: // telecom 3.5G
  16. case TelephonyManager.NETWORK_TYPE_EVDO_B: // telecom 3.5G
  17. case TelephonyManager.NETWORK_TYPE_HSPA: // unicom
  18. case TelephonyManager.NETWORK_TYPE_HSPAP: // unicom
  19. case TelephonyManager.NETWORK_TYPE_HSDPA: // unicom 3.5G
  20. case TelephonyManager.NETWORK_TYPE_HSUPA: // unicom 3.5G
  21. case TelephonyManager.NETWORK_TYPE_UMTS: // unicom
  22. return NETWORK_TYPE_3G;
  23. case TelephonyManager.NETWORK_TYPE_LTE:
  24. return NETWORK_TYPE_4G;
  25. }
  26. } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
  27. return NETWORK_TYPE_WIFI;
  28. }
  29. }
  30. return NETWORK_TYPE_NONE;
  31. }
   

   
  1. public static final int NETWORK_TYPE_NONE = 0;
  2. public static final int NETWORK_TYPE_2G = 2;
  3. public static final int NETWORK_TYPE_3G = 3;
  4. public static final int NETWORK_TYPE_4G = 4;
  5. public static final int NETWORK_TYPE_WIFI = 10;
  6. private String getNetType() {
  7. int type = getNetworkType(mContext);
  8. String netType = "";
  9. switch (type) {
  10. case Utils.NETWORK_TYPE_NONE:
  11. netType = "";
  12. break;
  13. case Utils.NETWORK_TYPE_2G:
  14. netType = "2G";
  15. break;
  16. case Utils.NETWORK_TYPE_3G:
  17. netType = "3G";
  18. break;
  19. case Utils.NETWORK_TYPE_4G:
  20. netType = "4G";
  21. break;
  22. case Utils.NETWORK_TYPE_WIFI:
  23. netType = "wifi";
  24. break;
  25. }
  26. return netType;
  27. }


2.实时监听网络切换

实现监听网络的功能主要依靠 广播监听  。不多说 看代码。回调中逻辑改成自己的就可以了。

   
  1. oncreate中 需要注册一下 广播
  2. mNetworkReceiver = new NetTypeReceiver();
  3. registerReceiver(mNetworkReceiver, intent);
  4. ondestory中需要将广播销毁
  5. if (mNetworkReceiver != null) {
  6. unregisterReceiver(mNetworkReceiver);
  7. mNetworkReceiver = null;
  8. }
  9. private class NetTypeReceiver extends BroadcastReceiver {
  10. String type = "";
  11. @Override
  12. public void onReceive(Context context, Intent intent) {
  13. String action = intent.getAction();
  14. if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
  15. ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(
  16. Context.CONNECTIVITY_SERVICE);
  17. NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
  18. if (networkInfo != null && networkInfo.isAvailable()) {
  19. String name = networkInfo.getTypeName();
  20. switch (networkInfo.getType()) {
  21. case 0://移动 网络
  22. if (TextUtils.isEmpty(type)) {
  23. type = name;
  24. }
  25. break;
  26. case 1:wifi网络
  27. if (TextUtils.isEmpty(type)) {
  28. type = name;
  29. }
  30. break;
  31. }
  32. } else {// 无网络
  33. //network was unavailable, stop the streamer, and show a dialog
  34. showNetworkInvalidView(R.string.network_error_message);
  35. type = "";
  36. }
  37. }
  38. }
  39. }

 

   

欢迎大家加入 android开发经验交流群:454430053

文章来源: wukong.blog.csdn.net,作者:再见孙悟空_,版权归原作者所有,如需转载,请联系作者。

原文链接:wukong.blog.csdn.net/article/details/50829667

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。