首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ios中检测sim卡的可能方法?

在ios中检测sim卡的可能方法?
EN

Stack Overflow用户
提问于 2013-12-25 05:27:10
回答 7查看 11.8K关注 0票数 7

我有一个iphone应用程序,它可以发送信息。当iphone中没有sim卡时,我想提醒用户。因此,我尝试了以下三个功能来检查sim卡的有效性。

代码语言:javascript
运行
复制
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if([messageClass canSendText]){
    // Sim available
    NSLog(@"Sim available");
}
else{
    //Sim not available
    NSLog(@"Sim not available");
}

if([MFMessageComposeViewController canSendText]){
    // Sim available
    NSLog(@"Sim available");
}
else{
    //Sim not available
    NSLog(@"Sim not available");
}

if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
{
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel:123456"]])
    {
        NSLog(@"Sim available");
    }
    else
    {
        NSLog(@"Sim not available");
    }
}

我检查了我的iphone没有sim,它总是返回@"Sim可用“。但是当我打开默认的“消息”应用程序并尝试发送sms时,它会发出警告:“没有安装SIM卡”。这个消息应用程序如何检测sim卡的可用性?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-12-25 06:37:24

通过下面的代码,您可以获得sim卡的详细信息,如载波名、移动代码、等国家代码、mobilenetworkcode.In ios 6,如果您的sim卡被移除,它也会保留旧的details.So,这个想法不会有用,但是在ios 7中只保留了载波名,剩下的代码就可以使用了。

代码语言:javascript
运行
复制
CTTelephonyNetworkInfo* info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier* carrier = info.subscriberCellularProvider;
NSString *mobileCountryCode = carrier.mobileCountryCode;
NSString *carrierName = carrier.carrierName;
NSString *isoCountryCode = carrier.isoCountryCode;
NSString *mobileNetworkCode = carrier.mobileNetworkCode

// Try this to track CTCarrier changes 
info.subscriberCellularProviderDidUpdateNotifier = ^(CTCarrier* inCTCarrier) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"User did change SIM");
        });
};
票数 7
EN

Stack Overflow用户

发布于 2014-06-23 13:33:54

您可以通过CTCarrier类来检查它。

代码语言:javascript
运行
复制
BOOL isSimCardAvailable = YES;

CTTelephonyNetworkInfo* info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier* carrier = info.subscriberCellularProvider;

if(carrier.mobileNetworkCode == nil || [carrier.mobileNetworkCode isEqualToString:@""])
{
    isSimCardAvailable = NO;
}

您需要添加CoreTelephony框架来使用CTTelephonyNetworkInfo和CTCarrier。

票数 10
EN

Stack Overflow用户

发布于 2015-01-15 20:56:55

在Swift中实现为只读计算属性:

代码语言:javascript
运行
复制
import CoreTelephony

var availableSIM: Bool {
    return CTTelephonyNetworkInfo().subscriberCellularProvider?.mobileNetworkCode != nil
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20769346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档