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

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

在iOS 8上,即使在iPad上,此function也会返回YES 。 我想这与通过Wi-Fi(或其他新function)进行通话有关,但我的iPad无法拨打电话。 任何人都知道更好的方法来检测该function?

好吧,我刚刚遇到同样的问题。 好像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. } } 

此代码在iPad iOS 8模拟器上返回NO 。 如果连续性电话function将使此返回YES我不知道iPad是否通过相同的Apple ID连接到运行iOS 8的iPhone。 但目前在通用版本中还没有这个function,因此在iPad和iPod Touch上应该总是返回NO

 [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"telprompt://"]] 

你可以看看它是否是iPhone。 并可能与- (BOOL)canOpenURL:(NSURL *)url 。 这样你避免显然不能打手机的设备。

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