有没有办法确定 iOS 中的 WWAN 连接类型(3G/Edge 等)?我熟悉 Apple 的 Reachability 类,但它可能只是 Wifi/WWAN 之间的不同......
非常感谢您的帮助!
有没有办法确定 iOS 中的 WWAN 连接类型(3G/Edge 等)?我熟悉 Apple 的 Reachability 类,但它可能只是 Wifi/WWAN 之间的不同......
非常感谢您的帮助!
在 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
}
此处的答案Checkingcellular network type in iOS可能会对您有所帮助。它说您可以尝试从他们的 IP 地址范围确定您的移动网络类型。
斯威夫特 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"
}
}