Как проверить, может ли устройство сделать телефонный звонок (iOS 8)?
На iOS <8 вы можете использовать функцию - (BOOL)canOpenURL:(NSURL *)url
,
На iOS 8 эта функция возвращает YES
даже на iPad. Я предполагаю, что это связано с звонками по Wi-Fi (или другой новой функциональности), но мой iPad не может звонить по телефону. Кто-нибудь знает лучший способ обнаружить эту возможность?
2 ответа
Итак, я только что столкнулся с той же проблемой. Похоже, iPad и iPod возвращают значение YES для метода canOpenURL. Пожалуйста, смотрите мой ответ ниже, так как это сработало для меня. У меня была настраиваемая ячейка представления коллекции, и поэтому этот код был в моем файле awakeFromNib. Однако вы должны написать этот код в ViewDidLoad этого perticular viewController.
Убедитесь, что вы включили "CoreTelephony.Framework" в ваш проект.
Включите следующие файлы в контроллер представления:
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
- (void)awakeFromNib {
// Initialization code
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel://"]]) {
// Check if iOS Device supports phone calls
CTTelephonyNetworkInfo *netInfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netInfo subscriberCellularProvider];
NSString *mnc = [carrier mobileNetworkCode];
// User will get an alert error when they will try to make a phone call in airplane mode.
if (([mnc length] == 0)) {
// Device cannot place a call at this time. SIM might be removed.
} else {
// iOS Device is capable for making calls
}
} else {
// iOS Device is not capable for making calls
}
if ( ! [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"sms:"]]) {
// iOS Device is not capable to send SMS messages.
}
}
Вы могли бы просто увидеть, если это iPhone. И, возможно, использовать это в сочетании с - (BOOL)canOpenURL:(NSURL *)url
, Таким образом, вы избегаете устройств, которые явно не могут звонить по сотовому телефону.
if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"] ) {
// Make Phone Call
}