关于获取当前网络是属于2G还是3G(极其简单)

2024-01-13 17:08

本文主要是介绍关于获取当前网络是属于2G还是3G(极其简单),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中国的iphone网络是区分2G和3G,要想获取当前的网络状态一直没有一个好的方法,网上给的例子也不尽让人满意最近闲来无事,仔细的研究Apple提供的例子:Reachability

通过如下的代码:

[cpp]  view plain copy
  1. Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];  
  2. NSLog(@"%d", [reach currentReachabilityStatus]);   
  3. return;  

在currentReachabilityStatus函数中,我们注意到这样的输出:

[cpp]  view plain copy
  1. static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, c*****t char* comment)  
  2. {  
  3. #if kShouldPrintReachabilityFlags  
  4. NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n",  
  5.      (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-',   
  6.      (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-',  
  7.      (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-',  
  8.      (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-',  
  9.      (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-',   
  10.      (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-',  
  11.      (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-',   
  12.      (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-',  
  13.      (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-',  
  14.      comment   
  15.      );  
  16. #endif  
  17. }  

当是wifi的时候输出R

当是3G的时候输出Rt

当是联通2G或者是移动的时候输出Rtc

在头文件定义如下:

[cpp]  view plain copy
  1. typedef enum   
  2. {   
  3.     NotReachable = 0,  
  4.     ReachableViaWiFi,   
  5.     ReachableVia3G,   
  6.     ReachableVia2G,//当前无法区分是联通的2G还是移动的2G  
  7. } NetworkStatus;  

因此我就是以这个为判断条件的,重写Reachability的函数:

[cpp]  view plain copy
  1. - (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags  
  2. {  
  3.     if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)  
  4.     {   
  5.          return NotReachable;  
  6.     }  
  7.     BOOL retVal = NotReachable;  
  8.     if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)  
  9.     {   
  10.          // if target host is reachable and no connection is required  
  11.         // then we'll assume (for now) that your on Wi-Fi   
  12.         retVal = ReachableViaWiFi;  
  13.     }  
  14.     if (  
  15.         ((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||   
  16.         (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0  
  17.     )  
  18.     {  
  19.         // ... and the connection is on-demand (or on-traffic) if the  
  20.         // calling application is using the CFSocketStream or higher APIs  
  21.          if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)   
  22.         {   
  23.             // ... and no [user] intervention is needed   
  24.             retVal = ReachableViaWiFi;   
  25.         }   
  26.     }  
  27.     if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)   
  28.     {   
  29.         retVal = ReachableVia3G;  
  30.         if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable)   
  31.         {   
  32.             if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection)   
  33.             {  
  34.                 retVal = ReachableVia3G;  
  35.                 if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired)   
  36.                 {  
  37.                     retVal = ReachableVia2G;  
  38.                 }  
  39.             }  
  40.         }   
  41.     }  
  42.     return retVal;  
  43. }  

这样就可以正确的区分是2G,3G,wifi网络,这只支持中国地区,其他地区未考虑。

作者:Rush.D.Xzj

欢迎转载 转载请注明来源

这篇关于关于获取当前网络是属于2G还是3G(极其简单)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602177

相关文章

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

SpringBoot整合Apache Spark实现一个简单的数据分析功能

《SpringBoot整合ApacheSpark实现一个简单的数据分析功能》ApacheSpark是一个开源的大数据处理框架,它提供了丰富的功能和API,用于分布式数据处理、数据分析和机器学习等任务... 目录第一步、添加android依赖第二步、编写配置类第三步、编写控制类启动项目并测试总结ApacheS

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

golang实现nacos获取配置和服务注册-支持集群详解

《golang实现nacos获取配置和服务注册-支持集群详解》文章介绍了如何在Go语言中使用Nacos获取配置和服务注册,支持集群初始化,客户端结构体中的IpAddresses可以配置多个地址,新客户... 目录golang nacos获取配置和服务注册-支持集群初始化客户端可选参数配置new一个客户端 支