我使用本主题中的答案。 iPhone -如何确定设备(AT&T,Verizon公司等?)的载体是一样的iphone得到运营商的详细信息 。 虽然使用SIM卡时,工作正常,返回的运营商名称,如果没有SIM卡是旧的运营商名称。 它不检测取出卡。
我知道,与苹果公司的文件,如果没有运营商,CTCarrier对象应是零这个矛盾。 但是,在我的应用我记录载体的信息,这让我最新的运营商名称虽然没有安装SIM卡。
我使用本主题中的答案。 iPhone -如何确定设备(AT&T,Verizon公司等?)的载体是一样的iphone得到运营商的详细信息 。 虽然使用SIM卡时,工作正常,返回的运营商名称,如果没有SIM卡是旧的运营商名称。 它不检测取出卡。
我知道,与苹果公司的文件,如果没有运营商,CTCarrier对象应是零这个矛盾。 但是,在我的应用我记录载体的信息,这让我最新的运营商名称虽然没有安装SIM卡。
根据文档为[CTCarrier carrierName]
如果配置设备的载体,然后取出SIM卡,该属性保留了承运人的名称。
据我所知,如果安装SIM卡,你无法察觉。 您只能确定一个WWAN连接可用使用Reachability
。
@import CoreTelephony;
-(BOOL)hasCellularCoverage
{
CTTelephonyNetworkInfo *networkInfo = [CTTelephonyNetworkInfo new];
CTCarrier *carrier = [networkInfo subscriberCellularProvider];
if (!carrier.isoCountryCode) {
NSLog(@"No sim present Or No cellular coverage or phone is on airplane mode.");
return NO;
}
return YES;
}
所述CTCarrier对象具有5个属性:
allowsVOIP
carrierName
isoCountryCode
mobileCountryCode
mobileNetworkCode
我做了关于CTCarrier一些测试,我来是为iOS 7时取出卡仅CARRIERNAME和allowsVOIP保留的结论。 isoCountryCode,mobileCountryCode和mobileNetworkCode被重置为iOS 7,这是SIM是否存在,或者不是你如何可以检测。
对于iOS 6中的所有值被保留。
我执行使用的是iPhone 4S和iPhone 5都运行iOS 7的测试。
斯威夫特版本:
func hasCellularCoverage() -> Bool {
let networkInfo = CTTelephonyNetworkInfo()
guard let info = networkInfo.subscriberCellularProvider else {return false}
if let carrier = info.isoCountryCode {
print("No sim present Or No cellular coverage or phone is on airplane mode. Carrier = \(carrier)");
return true
}
return false
}
要么
func hasCellularCoverage() -> Bool {
let networkInfo = CTTelephonyNetworkInfo()
guard let info = networkInfo.subscriberCellularProvider else {return false}
return info.isoCountryCode != nil ? true : false
}