iOS : 检查 phone 是否是双卡?

iOS : Check whether the phone is dual SIM?

在Android中我们可以检测phone是单卡还是双卡。正如我们所知,iPhone XS、iPhone XS Max、iPhone XR,以及后来的双卡双待功能,带有 nano-SIM 卡和 eSIM 卡,但中国大陆没有 eSIM 卡。

A) 我可以编程调用 MFMessageComposeViewController 通过单击按钮将 SMS 发送到特定号码。这是 下面的代码:这段代码可以告诉我们SIM卡是否是 插入与否。但它也适用于 eSIM 吗?

-(void)openMessageViewWithName:(NSString*)contactName withPhone:(NSString *)phone{

CTTelephonyNetworkInfo *networkInfo=[[CTTelephonyNetworkInfo alloc]init];

CTCarrier *carrier=networkInfo.subscriberCellularProvider;

NSString *Countrycode = carrier.isoCountryCode;

if ([Countrycode length]>0)     //Check If Sim Inserted
{

    [self sendSMS:msg recipientList:[NSMutableArray arrayWithObject:phone]];
}
else
{

    [AlertHelper showAlert:@"Message" withMessage:@"No sim card inserted"];
}

//发送消息的方法:

   - (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSMutableArray *)recipients{  
 MFMessageComposeViewController *controller1 = [[MFMessageComposeViewController alloc] init] ;
 controller1 = [[MFMessageComposeViewController alloc] init] ;
 if([MFMessageComposeViewController canSendText])
{
    controller1.body = bodyOfMessage;
    controller1.recipients = recipients;
    controller1.messageComposeDelegate = self;
    [self presentViewController:controller1 animated:YES completion:Nil];
 }
}

B) 是否可以通过编程确定我的 iPhone 是双 SIM 卡还是单 SIM 卡?如果是,它是双 SIM 卡,那么我们可以从我的应用程序中选择 SIM 卡来发送短信吗?

请帮助我解决这些问题并帮助我解决问题。

你试过吗?

    CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc]init];
    if (@available(iOS 12.0, *)) {
        NSDictionary *providers = [networkInfo serviceSubscriberCellularProviders];
        NSEnumerator *e = [providers objectEnumerator];
        if ([[e.allObjects firstObject] isKindOfClass:(CTCarrier.class)]) {
            NSString *str = ((CTCarrier *)[e.allObjects firstObject]).isoCountryCode;
        }
    } else {
        // do a fallback
    }

正如@PaulW11 在评论中提到的“不,您无法检测到 sim 卡的详细信息,也无法检测到用于发送消息的 sim 卡。这由用户控制 “ 仔细阅读理解

A) 首先,没有 SIM 卡相关数据或 phone 您将在 iOS 中获得的号码,您获得的唯一详细信息是有关网络的信息,例如运营商名称, mobilecountrycode、isocountrycode、mobilenetworkcode。 因此,如果您将 Verizon SIM 卡替换为 Verizon,您将看到运营商名称仅为 Verizon,除此之外您将一无所获

解决方案 按原样单击按钮调用 MFMessageController doing.This 打开 iOS 默认 SMS/Messages 应用程序。如果是双 SIM 卡,则允许用户从消息应用程序本身选择 SIM 卡。

B) 无法在您的应用程序中 select 特定的 SIM/Phone 号码。因为 iOS 中没有像 Android. 中那样做的规定,所以您必须调用 iOS 中的默认消息应用程序,您可以在其中选择所需的 SIM 卡(在双 sim 卡的情况下)用于发送短信,否则在单 sim 卡的情况下它直接从该号码发送消息