1

有没有办法确定 iOS 中的 WWAN 连接类型(3G/Edge 等)?我熟悉 Apple 的 Reachability 类,但它可能只是 Wifi/WWAN 之间的不同......

非常感谢您的帮助!

4

3 回答 3

3

在 iOS 7.0+ 中,我们有CoreTelephony可以为我们提供有关网络类型所需详细信息的框架。

这是一个示例。

CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
        NSString *currentRadio = telephonyInfo.currentRadioAccessTechnology;
        if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) {
            // LTE

        } else if([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) {
            // EDGE

        } else if([currentRadio isEqualToString:CTRadioAccessTechnologyWCDMA]){
            // 3G

        }
于 2014-08-22T11:42:32.343 回答
2

此处的答案Checkingcellular network type in iOS可能会对您有所帮助。它说您可以尝试从他们的 IP 地址范围确定您的移动网络类型。

于 2012-07-03T10:31:17.343 回答
0

斯威夫特 5,iOS12+:

class func gmGetNetWorkName() -> String {
        guard let reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, "www.google.com") else {
            return "NO INTERNET"
        }

        var flags = SCNetworkReachabilityFlags()
        SCNetworkReachabilityGetFlags(reachability, &flags)

        let isReachable = flags.contains(.reachable)
        let isWWAN = flags.contains(.isWWAN)

        if isReachable {
            if isWWAN {
                let networkInfo = CTTelephonyNetworkInfo()
                let carrierType = networkInfo.serviceCurrentRadioAccessTechnology

                guard let carrierTypeName = carrierType?.first?.value else {
                    return "UNKNOWN"
                }

                switch carrierTypeName {
                case CTRadioAccessTechnologyGPRS, CTRadioAccessTechnologyEdge, CTRadioAccessTechnologyCDMA1x:
                    return "2G"
                case CTRadioAccessTechnologyLTE:
                    return "4G"
                default:
                    return "3G"
                }
            } else {
                return "WIFI"
            }
        } else {
            return "NO INTERNET"
        }
    }
于 2020-04-20T16:54:23.727 回答