iPhone - 检测SIM卡可用性

Abd*_*tou 9 iphone ios core-telephony

我正在使用本主题中的答案.iPhone - 如何确定设备的运营商(AT&T,Verizon等?),这与获取iphone中的运营商详细信息相同.虽然使用SIM卡时工作正常,但如果没有SIM卡,则返回的运营商名称是旧的运营商名称.它未检测到SIM已被删除.

我知道这与Apple文档相矛盾,如果没有载体,CTCarrier对象应为零.但在我的应用程序中,我记录了运营商信息,它给了我最新的运营商名称,虽然没有安装SIM卡.

Eva*_*ski 11

根据该文件[CTCarrier carrierName]:

如果为运营商配置设备,然后移除SIM卡,则此属性将保留运营商的名称.

据我所知,您无法检测SIM卡是否已安装.您只能使用确定WWAN连接是否可用Reachability.

  • 是的,没有办法检查 SIM 卡是否存在。 (2认同)
  • 在您提供的同一文档链接中,不能使用“mobileCountryCode”或“mobileNetworkCode”来检测 SIM 是否存在?文档指出,如果不存在 SIM,这些值将为“nil”。这些属性似乎没有被保留 (2认同)

muz*_*uzz 9

@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;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

所述CTCarrier对象具有5个属性:

allowsVOIP
carrierName
isoCountryCode
mobileCountryCode
mobileNetworkCode
Run Code Online (Sandbox Code Playgroud)

我已经对CTCarrier做了一些测试,我得出的结论是,对于iOS 7,只有当删除SIM时才会保留carrierName和allowsVOIP.isoCountryCode,mobileCountryCode和mobileNetworkCode将针对iOS 7重置.这就是您可以检测SIM是否存在的方法.

对于iOS 6,保留所有值.

我使用运行iOS 7的iPhone 4S和iPhone 5进行了测试.