Как проверить, может ли устройство сделать телефонный звонок (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
}
Другие вопросы по тегам