在项目开发中,有时需要获取当前设备的运营商信息(是电信、还是联通、移动)。又或者想知道当前设备使用的移动网络制式(4G、3G、还是 2G)。这个借助系统的 CoreTelephony 框架就能够实现。
1,效果图
程序启动后自动获取手机的运营商、网络制式等信息,并输出到控制台中。

2,样例代码
import UIKit
import CoreTelephony
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//获取并输出运营商信息
let info = CTTelephonyNetworkInfo()
if let carrier = info.subscriberCellularProvider {
let currentRadioTech = info.currentRadioAccessTechnology!
print("数据业务信息:\(currentRadioTech)")
print("网络制式:\(getNetworkType(currentRadioTech: currentRadioTech))")
print("运营商名字:\(carrier.carrierName!)")
print("移动国家码(MCC):\(carrier.mobileCountryCode!)")
print("移动网络码(MNC):\(carrier.mobileNetworkCode!)")
print("ISO国家代码:\(carrier.isoCountryCode!)")
print("是否允许VoIP:\(carrier.allowsVOIP)")
}
}
//根据数据业务信息获取对应的网络类型
func getNetworkType(currentRadioTech:String) -> String {
var networkType = ""
switch currentRadioTech {
case CTRadioAccessTechnologyGPRS:
networkType = "2G"
case CTRadioAccessTechnologyEdge:
networkType = "2G"
case CTRadioAccessTechnologyeHRPD:
networkType = "3G"
case CTRadioAccessTechnologyHSDPA:
networkType = "3G"
case CTRadioAccessTechnologyCDMA1x:
networkType = "2G"
case CTRadioAccessTechnologyLTE:
networkType = "4G"
case CTRadioAccessTechnologyCDMAEVDORev0:
networkType = "3G"
case CTRadioAccessTechnologyCDMAEVDORevA:
networkType = "3G"
case CTRadioAccessTechnologyCDMAEVDORevB:
networkType = "3G"
case CTRadioAccessTechnologyHSUPA:
networkType = "3G"
default:
break
}
return networkType
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
3.如何获取蜂窝信号强度呢?
可以用下面的代码,但是从ios11开始已经不支持了。
import CoreTelephony
import Darwin
static func getSignalStrength()->Int{
var result : Int = 0
//int CTGetSignalStrength();
let libHandle = dlopen ("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_NOW)
let CTGetSignalStrength2 = dlsym(libHandle, "CTGetSignalStrength")
typealias CFunction = @convention(c) () -> Int
if (CTGetSignalStrength2 != nil) {
let fun = unsafeBitCast(CTGetSignalStrength2!, to: CFunction.self)
let result = fun()
return result;
print("!!!!result \(result)")
}
return -1
}