zoukankan      html  css  js  c++  java
  • iOS 手机网络类型判断

    import Foundation
    import CoreTelephony
    
    /// 设备网络类型
    public enum NetworkType {
        case unknow, unconnect, wifi
        /// 手机网络
        case phone(NetPhoneType)
        
        /// 当前的连接网络类型
        var type: String {
            switch self {
            case .unknow:
                return "unknow"
            case .unconnect:
                return "unconnect"
            case .wifi:
                return "wifi"
            case .phone(let netPhoneType):
                return netPhoneType.rawValue
            }
        }
        
        /// 手机网络类型
        public enum NetPhoneType: String {
            case unknow = "unknow"
            case _2G = "2G"
            case _3G = "3G"
            case _4G = "4G"
            case _5G = "5G"
            
            static var type: NetPhoneType {
                return getNetPhoneType()
            }
        }
    }
    
    
    private extension NetworkType.NetPhoneType {
        /// 获取手机网络类型
        static func getNetPhoneType() -> NetworkType.NetPhoneType {
            let info = CTTelephonyNetworkInfo()
            
            var type: String
            if #available(iOS 12, *) {
                type = info.serviceCurrentRadioAccessTechnology?.values.first ?? ""
            } else {
                type = info.currentRadioAccessTechnology ?? ""
            }
            
            guard !type.isEmpty else {
                return .unknow
            }
            
            let _2gTypes = [CTRadioAccessTechnologyGPRS,
                            CTRadioAccessTechnologyEdge,
                            CTRadioAccessTechnologyCDMA1x]
            if _2gTypes.contains(type) {
                return ._2G
            }
            
            let _3gTypes = [CTRadioAccessTechnologyHSDPA,
                            CTRadioAccessTechnologyWCDMA,
                            CTRadioAccessTechnologyHSUPA,
                            CTRadioAccessTechnologyCDMAEVDORev0,
                            CTRadioAccessTechnologyCDMAEVDORevA,
                            CTRadioAccessTechnologyCDMAEVDORevB,
                            CTRadioAccessTechnologyeHRPD]
            if _3gTypes.contains(type) {
                return ._3G
            }
            
            let _4gTypes = [CTRadioAccessTechnologyLTE]
            if _4gTypes.contains(type) {
                return ._4G
            }
            
            if #available(iOS 14.1, *) {
                let _5gTypes = [CTRadioAccessTechnologyNR, CTRadioAccessTechnologyNRNSA]
                if _5gTypes.contains(type) {
                    return ._5G
                }
            }
            
            return .unknow
        }
    }
    

      

  • 相关阅读:
    计科4班曾祥刚2016024290
    线程:子线程先循环十次,主线程在循环20次,再子线程循环十次,主线程循环20次,如此循环50次
    java经典程序(11-20)
    java经典程序(1-10)
    String,File和xml
    自写一个双向链表
    i love my girl
    javamail发邮件
    Java反射机制(创建Class对象的三种方式)
    java基础面试题
  • 原文地址:https://www.cnblogs.com/mustard22/p/15351919.html
Copyright © 2011-2022 走看看