Simplement vérifier si un dispositif de "soutien" des appels téléphoniques peut-être pas la meilleure façon de faire les choses en fonction de ce que vous essayez d'accomplir. Croyez le ou non, certaines personnes utilisent les vieux iPhones sans service comme si ils étaient un iPod Touch. Parfois, les gens n'ont pas de cartes SIM installée dans leurs iPhones. Dans mon application, j'ai voulu composer un numéro de téléphone si les utilisateurs de l'appareil a pu, sinon, je voulais afficher le numéro de téléphone et invite l'utilisateur à saisir un téléphone à composer. Voici une solution je suis venu avec qui a travaillé jusqu'à présent. N'hésitez pas à commenter et à l'améliorer.
// You must add the CoreTelephony.framework
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
-(bool)canDevicePlaceAPhoneCall {
/*
Returns YES if the device can place a phone call
*/
// Check if the device can place a phone call
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]) {
// Device supports phone calls, lets confirm it can place one right now
CTTelephonyNetworkInfo *netInfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mnc = [carrier mobileNetworkCode];
if (([mnc length] == 0) || ([mnc isEqualToString:@"65535"])) {
// Device cannot place a call at this time. SIM might be removed.
return NO;
} else {
// Device can place a phone call
return YES;
}
} else {
// Device does not support phone calls
return NO;
}
}
Vous remarquerez que je vérifie si les mobileNetworkCode est de 65535. Dans mes tests, il semble que lorsque vous retirez la carte SIM, puis les mobileNetworkCode est fixé à 65 535. Pas sûr à 100% pourquoi.