通过Swift获取当前网络状态

通过第三方库Alamofire获取网络状态只能获取到ethernetOrWiFicellularnotReachableunknown这几种网络状态,不能准确的获取到Wifi/5G/4G/3G/2G状态,于是通过系统SystemConfiguration跟CoreTelephony库来实现获取当前对应的网络状态,实现代码如下:

import CoreTelephony
import SystemConfiguration/// 无网络返回字样
private static var notReachable: String {get {return "notReachable"}}/// 获取网络类型
private static func getNetworkType() -> String {var zeroAddress = sockaddr_storage()bzero(&zeroAddress, MemoryLayout<sockaddr_storage>.size)zeroAddress.ss_len = __uint8_t(MemoryLayout<sockaddr_storage>.size)zeroAddress.ss_family = sa_family_t(AF_INET)let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {$0.withMemoryRebound(to: sockaddr.self, capacity: 1) { address inSCNetworkReachabilityCreateWithAddress(nil, address)}}guard let defaultRouteReachability = defaultRouteReachability else {return notReachable}var flags = SCNetworkReachabilityFlags()let didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags)guard didRetrieveFlags == true,(flags.contains(.reachable) && !flags.contains(.connectionRequired)) == trueelse {return notReachable}if flags.contains(.connectionRequired) {return notReachable} else if flags.contains(.isWWAN) {return self.cellularType()} else {return "WiFi"}}/// 获取蜂窝数据类型private static func cellularType() -> String {let info = CTTelephonyNetworkInfo()var status: Stringif #available(iOS 12.0, *) {guard let dict = info.serviceCurrentRadioAccessTechnology,let firstKey = dict.keys.first,let statusTemp = dict[firstKey] else {return notReachable}status = statusTemp} else {guard let statusTemp = info.currentRadioAccessTechnology else {return notReachable}status = statusTemp}if #available(iOS 14.1, *) {if status == CTRadioAccessTechnologyNR || status == CTRadioAccessTechnologyNRNSA {return "5G"}}switch status {case CTRadioAccessTechnologyGPRS,CTRadioAccessTechnologyEdge,CTRadioAccessTechnologyCDMA1x:return "2G"case CTRadioAccessTechnologyWCDMA,CTRadioAccessTechnologyHSDPA,CTRadioAccessTechnologyHSUPA,CTRadioAccessTechnologyeHRPD,CTRadioAccessTechnologyCDMAEVDORev0,CTRadioAccessTechnologyCDMAEVDORevA,CTRadioAccessTechnologyCDMAEVDORevB:return "3G"case CTRadioAccessTechnologyLTE:return "4G"default:return notReachable}}

Swift获取当前网络状态Wifi/5G/4G/3G/2G相关推荐

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

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

  2. Android获取当前网络状态

    Android获取当前网络状态 效果图 有网络 没有网络 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9052 ...

  3. uniapp获取手机网络状态和手机系统信息(如4g,wifi)

    先看代码,复制使用即可.(uni内置方法uni.getNetworkType用来获取网络状态,uni.getSystemInfo用来获取手机系统) <template><view&g ...

  4. iOS开发 - 检测网络状态(WIFI、2G/3G/4G)

    检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 让用户了解自己的网络状态,防止一些误会(比如怪应用无能) 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI ...

  5. android 获取手机网络状态

    与网络相关的,就经常要做网络状态判断及信息获取.用到的类ConnectivityManager 和NetworkInfo //获取网络连接管理者ConnectivityManager connecti ...

  6. 5G/4G/3G无线图传产品的发展历史和技术演进

    1.何为无线图传 此类设备即所谓的DVR/NVR/IPC或DVS,都一个概念. 要从根本上理解此类DVR/DVS/IPC产品,核心的就是 √音视频实时网传 √本地录像 √GPS定位/GIS √语音对讲 ...

  7. Swift监听网络状态

    原文:Native Network Monitoring In Swift 此api支持 iOS12+ 我们将介绍使用Swift 5在iOS上监控网络连接状态的原生解决方案,以及如何使用Network ...

  8. 4G/3G/2G 无线上网速率

    无线通常速率 上行速率和下行速率,的数量级别 2G:100Kbps 3G:5Mbps 4G:100Mbps 通常下传速率,高于上传速率. 参考 https://blog.csdn.net/mao834 ...

  9. 5G/4G外置型无线通信模块

    5G/4G外置型无线通信模块TD210,全网通5G/4G/3G/2G网络,数据透传.加密传输,RS485/RS232/TTL电平接口,支持TCP/UDP/环保212/MQTT协议,工业级32位通信处理 ...

最新文章

  1. 前端学习(3221):类式组件中的props
  2. java atd_Java字符串String详解
  3. debug assertion failed是什么意思?_如何使用 pdb 来性感 debug 你的 Python 代码?
  4. 解决nginx下connect() to 127.0.0.1:3000 failed
  5. 创建自己的Convers. Routine.
  6. Netty工作笔记0043---单Reactor多线程模式
  7. Javascript实践-Function对象扩展之延时执行函数
  8. Java 程序员都该懂的 volatile 关键字
  9. jsp input输入实时校验长度并提示_拆解「输入框」,理解输入反馈的规则逻辑
  10. Javashop B2B2C 系统之社区团购商城
  11. Enigma密码机原理图解
  12. Invalid or unexpected token 报错
  13. 扫拖地机器人预留_进阶规划,扫拖一体,小瓦扫地机器人规划版重度体验
  14. rtorrent ubuntu端命令行种子下载器
  15. 14周 上 购物案列
  16. Unity3D 《拥挤城市》3D房子建筑透视效果实现
  17. 栈(LIFO:后进先出)
  18. 什么是堆栈,堆和栈到底是不是一个概念
  19. 如何理解这段代码:void (*signal (int sinno,void(*func)(int)))(int)
  20. 小队pkc++_骑士小队2人金属第一印象

热门文章

  1. JPA与Hibernate的区别
  2. VMware收购云监控公司Wavefront
  3. 外地父母常住北京-医疗问题-新农合北京就医实时结算
  4. 影响个人征信的不良习惯有哪些?
  5. python点图_Python | 点图
  6. 解读| 支付宝催泪视频背后的反欺诈升级战
  7. spring boot 中用到的thymeleaf (模板引擎)
  8. 安全检查如何确保建筑幕墙施工的安全管理呢
  9. 水星MW300R-通用无线路由器安全设置-防蹭网-详解-教程
  10. c语言 for循环说课,《程序的循环结构-For循环语句》教学设计