你好,我正在使用SMSComposer并希望从通讯录向联系人发送短信。我想检测我的iPhone是否插入了SIM卡。
有什么方法可以实现这一点吗?
我尝试过Reachability类,但它只提供有关WWAN和互联网连接的信息。Core Telephony Framework是否具有这样的功能? 例如,iPhone的运营商名称等。
任何帮助都将不胜感激。 谢谢 Vikas
你好,我正在使用SMSComposer并希望从通讯录向联系人发送短信。我想检测我的iPhone是否插入了SIM卡。
有什么方法可以实现这一点吗?
我尝试过Reachability类,但它只提供有关WWAN和互联网连接的信息。Core Telephony Framework是否具有这样的功能? 例如,iPhone的运营商名称等。
任何帮助都将不胜感激。 谢谢 Vikas
你可以尝试使用CoreTelephony
框架,例如:
let noAvailability = CTTelephonyNetworkInfo()
.serviceSubscriberCellularProviders?
.values
.compactMap { $0.mobileCountryCode }
.isEmpty ?? false
请尝试链接CoreTelephony.framework
,然后:
移动国家代码(CTCarrier的一个属性)的官方文档包含了一些关于一些极端情况的更多信息,这可能值得考虑。
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
NSString *_code = [[[[CTTelephonyNetworkInfo alloc] init] subscriberCellularProvider] mobileCountryCode];
你可以在官方文档中找到更多信息,但简要地说:
如果以下任一情况适用,则此属性的值为
nil
:
设备中没有SIM卡。
设备处于蜂窝服务范围之外。
在iPhone 4S之前的硬件上,当处于飞行模式时,该值可能为
nil
。
为此,您需要添加MessageUI.framework框架...
尝试使用这段代码...它可能会帮助您
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if([messageClass canSendText]){
// Sim available
}
else{
//Sim not available
}
canSendText
始终返回YES。 - Sunkas
carrierName
属性混淆,我建议您尝试使用我回答中的代码,而不是其他内容。 这就是为什么我写了我写的东西; 当您陷入困境时,请随时仔细阅读官方文档,而不是不可信的来源。 谢谢! - holex