Swift获取当前网络状态Wifi/5G/4G/3G/2G
通过Swift获取当前网络状态
通过第三方库Alamofire
获取网络状态只能获取到ethernetOrWiFi、cellular、notReachable、unknown这几种网络状态,不能准确的获取到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相关推荐
- 你以为的5G仅仅是运行在5G的频段嘛?一文带你了解国内运营商的5G/4G/3G/2G频谱划分
前段时间一个朋友问我一个有趣的问题,很多人都说5G是毫米波,可是根据大学物理学的公式,光速是3*10的8次方,要想波长达到mm级别,频率至少也得30G才行呀,5G的频率那么低怎么实现呀,作为一个通信人 ...
- Android获取当前网络状态
Android获取当前网络状态 效果图 有网络 没有网络 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9052 ...
- uniapp获取手机网络状态和手机系统信息(如4g,wifi)
先看代码,复制使用即可.(uni内置方法uni.getNetworkType用来获取网络状态,uni.getSystemInfo用来获取手机系统) <template><view&g ...
- iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 让用户了解自己的网络状态,防止一些误会(比如怪应用无能) 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI ...
- android 获取手机网络状态
与网络相关的,就经常要做网络状态判断及信息获取.用到的类ConnectivityManager 和NetworkInfo //获取网络连接管理者ConnectivityManager connecti ...
- 5G/4G/3G无线图传产品的发展历史和技术演进
1.何为无线图传 此类设备即所谓的DVR/NVR/IPC或DVS,都一个概念. 要从根本上理解此类DVR/DVS/IPC产品,核心的就是 √音视频实时网传 √本地录像 √GPS定位/GIS √语音对讲 ...
- Swift监听网络状态
原文:Native Network Monitoring In Swift 此api支持 iOS12+ 我们将介绍使用Swift 5在iOS上监控网络连接状态的原生解决方案,以及如何使用Network ...
- 4G/3G/2G 无线上网速率
无线通常速率 上行速率和下行速率,的数量级别 2G:100Kbps 3G:5Mbps 4G:100Mbps 通常下传速率,高于上传速率. 参考 https://blog.csdn.net/mao834 ...
- 5G/4G外置型无线通信模块
5G/4G外置型无线通信模块TD210,全网通5G/4G/3G/2G网络,数据透传.加密传输,RS485/RS232/TTL电平接口,支持TCP/UDP/环保212/MQTT协议,工业级32位通信处理 ...
最新文章
- 前端学习(3221):类式组件中的props
- java atd_Java字符串String详解
- debug assertion failed是什么意思?_如何使用 pdb 来性感 debug 你的 Python 代码?
- 解决nginx下connect() to 127.0.0.1:3000 failed
- 创建自己的Convers. Routine.
- Netty工作笔记0043---单Reactor多线程模式
- Javascript实践-Function对象扩展之延时执行函数
- Java 程序员都该懂的 volatile 关键字
- jsp input输入实时校验长度并提示_拆解「输入框」,理解输入反馈的规则逻辑
- Javashop B2B2C 系统之社区团购商城
- Enigma密码机原理图解
- Invalid or unexpected token 报错
- 扫拖地机器人预留_进阶规划,扫拖一体,小瓦扫地机器人规划版重度体验
- rtorrent ubuntu端命令行种子下载器
- 14周 上 购物案列
- Unity3D 《拥挤城市》3D房子建筑透视效果实现
- 栈(LIFO:后进先出)
- 什么是堆栈,堆和栈到底是不是一个概念
- 如何理解这段代码:void (*signal (int sinno,void(*func)(int)))(int)
- 小队pkc++_骑士小队2人金属第一印象