-->

iPhone - 检测SIM卡的可用性(iPhone - Detecting SIM card a

2019-06-24 06:02发布

我使用本主题中的答案。 iPhone -如何确定设备(AT&T,Verizon公司等?)的载体是一样的iphone得到运营商的详细信息 。 虽然使用SIM卡时,工作正常,返回的运营商名称,如果没有SIM卡是旧的运营商名称。 它不检测取出卡。

我知道,与苹果公司的文件,如果没有运营商,CTCarrier对象应是零这个矛盾。 但是,在我的应用我记录载体的信息,这让我最新的运营商名称虽然没有安装SIM卡。

Answer 1:

根据文档为[CTCarrier carrierName]

如果配置设备的载体,然后取出SIM卡,该属性保留了承运人的名称。

据我所知,如果安装SIM卡,你无法察觉。 您只能确定一个WWAN连接可用使用Reachability



Answer 2:

@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;
}


Answer 3:

所述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的测试。



Answer 4:

斯威夫特版本:

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

}


文章来源: iPhone - Detecting SIM card availability