在iOS< 8上,您可以使用函数- (BOOL)canOpenURL:(NSURL *)url
。
在iOS 8上,即使在iPad上,此功能也会返回YES
。我猜它与通过wi-fi(或其他新功能)通话有关,但我的iPad无法拨打电话。有人知道更好的方法来检测这种能力吗?
答案 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
}