CoreTelephoney框架用來獲取手機網絡狀態以及運營商相關信息。網絡
這個類是CoreTelephoney框架的核心,使用它來獲取手機的運營商、網絡等狀態信息。使用示例以下:框架
- (void)viewDidLoad { [super viewDidLoad]; CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init]; //獲取運營商信息 CTCarrier *carrier = info.subscriberCellularProvider; NSLog(@"carrier:%@", [carrier description]); }
運營商信息示例以下:ide
Carrier name: [中國移動] Mobile Country Code: [460] Mobile Network Code:[02] ISO Country Code:[cn] Allows VOIP? [YES]
CTTelephonyNetworkInfo類解析以下:編碼
//獲取全部運營商信息 iOS 12 後支持 @property(readonly, retain, nullable) NSDictionary<NSString *, CTCarrier *> *serviceSubscriberCellularProviders; //當前獲取運營商信息 @property(readonly, retain, nullable) CTCarrier *subscriberCellularProvider; //無線網絡提供信息 @property (nonatomic, readonly, retain, nullable) NSDictionary<NSString *, NSString *> * serviceCurrentRadioAccessTechnology; //當前無線網絡信息 /* CTRadioAccessTechnologyGPRS //2.5g CTRadioAccessTechnologyEdge //2.7G CTRadioAccessTechnologyWCDMA //3G CTRadioAccessTechnologyHSDPA //3.5G CTRadioAccessTechnologyHSUPA //3G與4G之間的過分技術 CTRadioAccessTechnologyCDMA1x //3G CTRadioAccessTechnologyCDMAEVDORev0 CTRadioAccessTechnologyCDMAEVDORevA CTRadioAccessTechnologyCDMAEVDORevB CTRadioAccessTechnologyeHRPD CTRadioAccessTechnologyLTE //4G */ @property (nonatomic, readonly, retain, nullable) NSString* currentRadioAccessTechnology;
CTCattier類中定義了運營商相關的信息,解析以下:atom
//運營商名字 @property (nonatomic, readonly, retain, nullable) NSString *carrierName; //國家編碼 @property (nonatomic, readonly, retain, nullable) NSString *mobileCountryCode; //網絡編碼 @property (nonatomic, readonly, retain, nullable) NSString *mobileNetworkCode; //ISO編碼 @property (nonatomic, readonly, retain, nullable) NSString* isoCountryCode; //是否容許VOIP @property (nonatomic, readonly, assign) BOOL allowsVOIP;
CTCellularData類用來監聽用戶的網絡狀態,能夠設置當網絡狀態發生變化後回調的方法,例如:spa
cellularData = [[CTCellularData alloc] init]; // 狀態發生變化時調用 cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState restrictedState) { switch (restrictedState) { case kCTCellularDataRestrictedStateUnknown: NSLog(@"蜂窩移動網絡狀態:未知"); break; case kCTCellularDataRestricted: NSLog(@"蜂窩移動網絡狀態:關閉"); break; case kCTCellularDataNotRestricted: NSLog(@"蜂窩移動網絡狀態:開啓"); break; default: break; } };
須要注意,在iOS中使用網絡須要獲取用戶權限,若是用戶沒有給網絡權限,獲取到的狀態也將是未開啓。rest
使用CTCallCenter相關類能夠獲取當前通話電話的相關信息,CTCallCenter經過管理中心,其中提供了一個方法來獲取當前進行中的通話:code
//獲取當前全部激活中的通話 @property(readonly, retain, nullable) NSSet<CTCall*> *currentCalls;
通話被抽象成CTCall對象,解析以下:對象
//當前通話狀態 /* CTCallStateDialing 撥號 CTCallStateIncoming 來電 CTCallStateConnected 接通 CTCallStateDisconnected 掛斷 */ @property(nonatomic, readonly, copy) NSString *callState; //通話ID @property(nonatomic, readonly, copy) NSString *callID;