如何检查设备是否可以拨打电话(iOS 8)?

时间:2014-09-16 15:50:05

标签: ios objective-c ipad ios8

在iOS< 8上,您可以使用函数- (BOOL)canOpenURL:(NSURL *)url

在iOS 8上,即使在iPad上,此功能也会返回YES。我猜它与通过wi-fi(或其他新功能)通话有关,但我的iPad无法拨打电话。有人知道更好的方法来检测这种能力吗?

2 个答案:

答案 0 :(得分:16)

好的,所以我刚遇到同样的问题。似乎iPad和iPod为canOpenURL方法返回YES值。请看下面的答案,因为这对我有用。我有一个自定义集合视图单元格,这就是为什么这个代码在我的awakeFromNib文件中。但是,您应该在该特定viewController的ViewDidLoad中编写此代码。

确保在项目中加入" 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. 
    }
}

答案 1 :(得分:-4)

你可以看看它是不是iPhone。并且可能与- (BOOL)canOpenURL:(NSURL *)url结合使用。这样你就可以避免显然无法拨打手机的设备。

if ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"] ) {
     // Make Phone Call
}