web-dev-qa-db-ja.com

デバイスが電話をかけることができるかどうかを確認する方法(iOS 8)?

IOS <8では、関数- (BOOL)canOpenURL:(NSURL *)urlを使用できます。

IOS 8では、この関数はiPadでもYESを返します。 Wi-Fi(または別の新機能)経由の通話に接続されているようですが、iPadで電話をかけることができません。誰かがその機能を検出するより良い方法を知っていますか?

31
Maciej Kozieł

はい、同じ問題が発生しました。 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. 
    }
}
16
Milan Shah