iOS获取网络连接状态

通过AFNetworking获取的网络状态只有未知无网络连接手机自带网络WIFI,需求是需要准确的定位到是WiFi、5G、4G、3G、2G,所以AFNetworking并不能满足需求,只能通过调用系统SCNetworkReachability跟CTTelephonyNetworkInfo来获取当前的网络连接状态。


#import <SystemConfiguration/SCNetworkReachability.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>//无网络
static NSString * notReachable = @"notReachable";#pragma mark --- 获取当前网络状态
- (NSString *)getNetworkType {//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态struct sockaddr_storage zeroAddress;bzero(&zeroAddress, sizeof(zeroAddress));zeroAddress.ss_len = sizeof(zeroAddress);zeroAddress.ss_family = AF_INET;// Recover reachability flagsSCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);SCNetworkReachabilityFlags flags;//获得连接的标志BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);CFRelease(defaultRouteReachability);//如果不能获取连接标志,则不能连接网络,直接返回if (!didRetrieveFlags) {return notReachable;}BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0);BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0);if (isReachable && !needsConnection) { }else{return notReachable;}if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired ) {return notReachable;} else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) {return [self cellularType];} else {return @"WiFi";}}- (NSString *)cellularType {CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];NSString *currentRadioAccessTechnology;if (@available(iOS 12.1, *)) {if (info && [info respondsToSelector:@selector(serviceCurrentRadioAccessTechnology)]) {NSDictionary *radioDic = [info serviceCurrentRadioAccessTechnology];if (radioDic.allKeys.count) {currentRadioAccessTechnology = [radioDic objectForKey:radioDic.allKeys[0]];} else {return notReachable;}} else {return notReachable;}} else {currentRadioAccessTechnology = info.currentRadioAccessTechnology;}if (currentRadioAccessTechnology) {if (@available(iOS 14.1, *)) {if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyNRNSA] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyNR]) {return @"5G";}}if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {return @"4G";} else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {return @"3G";} else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) {return @"2G";} else {return @"Unknow";}} else {return notReachable;}
}

亲测满足当前需求,如果后续出到6G以及其他网络频段,需要增加相应的判断,返回对应的网络标识。

iOS获取当前网络连接状态WiFi、5G、4G、3G、2G相关推荐

  1. Swift获取当前网络状态Wifi/5G/4G/3G/2G

    通过Swift获取当前网络状态 通过第三方库Alamofire获取网络状态只能获取到ethernetOrWiFi.cellular.notReachable.unknown这几种网络状态,不能准确的获 ...

  2. SwiftUI 网络请求组件之 使用Combin观察iOS应用程序网络连接状态(中文教程含视频源吗)

    实战需求 SwiftUI 网络请求组件之 使用Combin观察iOS应用程序网络连接状态(中文教程含视频源吗) 本文价值与收获 看完本文后,您将能够作出下面的界面 SwiftUI网络请求教程之 使用C ...

  3. iOS 检测设备所连接的WiFi、4G等网络是否真的可以连通

    在开发过程我们经常会遇到,获取手机连接的WiFi.4G等状态,并且判断是否连接网络,通常我们使用AFNetworking.Reachability等库,只要判断连接上WiFi或者4G就表明他已经连接网 ...

  4. iOS 获取手机当前连接的 WiFi 信息

  5. 你以为的5G仅仅是运行在5G的频段嘛?一文带你了解国内运营商的5G/4G/3G/2G频谱划分

    前段时间一个朋友问我一个有趣的问题,很多人都说5G是毫米波,可是根据大学物理学的公式,光速是3*10的8次方,要想波长达到mm级别,频率至少也得30G才行呀,5G的频率那么低怎么实现呀,作为一个通信人 ...

  6. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...

  7. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  8. Android 监听网络连接状态,判断网络连接方式,9.0网络连接,获取已连接WiFi名称SSID和MAC

    获取已连接的WiFi名称 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> ...

  9. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

最新文章

  1. 解决ReSharper自动删除换行
  2. php一些单选、复选框的默认选择方法(示例)
  3. Leetcode 130. 被围绕的区域 (每日一题 20210720 同类型题)
  4. 深度学习核心技术精讲100篇(二十)-如何通过树模型实现梯度提升树(GBDT)+LR,随机森林(RandomForest) +LR
  5. Android开发之将Android SVG 转 VectorDrawable矢量图的方法
  6. linux之vifm和ranger操作文件管理器使用总结
  7. ImageView及其子类
  8. 抽象工厂模式升级版————泛型化实现
  9. JZ46把数字翻译成字符串
  10. Pycharm 新版本打开md文件卡死-解决办法
  11. iapp退出软件按钮代码_还在为金蝶财务软件发愁吗?超详细!金蝶财务软件实操流程,速收...
  12. 8年项目总结:4个G,项目经理必备模板全汇总
  13. suitecrm 如何backup and restore ,从一个server 转移到另一个 server . 并保证customer package , customer module 不丢...
  14. 看漫画来告诉你:什么是 “元宇宙” ?
  15. 优化计算机组策略,windows系统优化--使你的计算机飞起来
  16. 愿天下有情人都是失散多年的兄妹(25分)
  17. HDU - 1546 Idiomatic Phrases Game
  18. 多约束条件求最优值matlab,[MATLAB数学相关] 请教,约束条件下多元函数最小值的求解...
  19. 建筑CAD基础设计【3】
  20. 【历史上的今天】6 月 19 日:iPhone 3GS 上市;帕斯卡诞生;《反恐精英》开始测试

热门文章

  1. linux、linux虚拟机相关
  2. oracle中的start with connect by用法
  3. 打算在县城“买”片地
  4. KingbaseES 中的xmin,xmax等系统字段说明
  5. 关于台电X16 plus (Tpad)安装win10系统
  6. CSS精华敏感肌护肤品,修复成分大揭秘|敏感肌屏障修复
  7. 【工程师整活】Ai-WB1-A1S实现离线语音+APP+天猫精灵控制风扇
  8. 自然语言和计算机语言二义性,二级C++精品课程第一章第一节计算机语言及其发展...
  9. 【转】如何在Ubuntu 16.04上使用UFW设置防火墙
  10. uniapp引入支付宝原生扫码插件步骤详解