我有一个iphone应用程序,它可以发送信息。当iphone中没有sim卡时,我想提醒用户。因此,我尝试了以下三个功能来检查sim卡的有效性。
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卡的可用性?
发布于 2013-12-25 06:37:24
通过下面的代码,您可以获得sim卡的详细信息,如载波名、移动代码、等国家代码、mobilenetworkcode.In ios 6,如果您的sim卡被移除,它也会保留旧的details.So,这个想法不会有用,但是在ios 7中只保留了载波名,剩下的代码就可以使用了。
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");
});
};发布于 2014-06-23 13:33:54
您可以通过CTCarrier类来检查它。

BOOL isSimCardAvailable = YES;
CTTelephonyNetworkInfo* info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier* carrier = info.subscriberCellularProvider;
if(carrier.mobileNetworkCode == nil || [carrier.mobileNetworkCode isEqualToString:@""])
{
isSimCardAvailable = NO;
}您需要添加CoreTelephony框架来使用CTTelephonyNetworkInfo和CTCarrier。
发布于 2015-01-15 20:56:55
在Swift中实现为只读计算属性:
import CoreTelephony
var availableSIM: Bool {
return CTTelephonyNetworkInfo().subscriberCellularProvider?.mobileNetworkCode != nil
}https://stackoverflow.com/questions/20769346
复制相似问题