Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active March 27, 2016 03:35
Show Gist options
  • Save KentarouKanno/349abc76a94a3a109039 to your computer and use it in GitHub Desktop.
Save KentarouKanno/349abc76a94a3a109039 to your computer and use it in GitHub Desktop.
CoreTelephony

Core Telephony

Core Telephony Framework Reference

★ 電話に関するイベントを取得する

let callCenter = CTCallCenter()

callCenter.callEventHandler = { (call) -> () in
    // イベント発生時に呼ばれるハンドラ
    
    print(call.callID)
    //=> A78CTDS6F-5F75-4513-BYD4-20U9866515BF
    
    switch call.callState {
    case CTCallStateIncoming:
        
        print("CTCallStateIncoming(着信)")
    case CTCallStateDialing:
        
        print("CTCallStateDialing(発信)")
    case CTCallStateConnected:
        
        print("CTCallStateConnected(通話開始)")
    case CTCallStateDisconnected:
        
        print("CTCallStateDisconnected(切断)")
    default:
        break
    }
}

★ キャリアの情報を取得する

let carrier = CTTelephonyNetworkInfo().subscriberCellularProvider
print(carrier)
/*
 Optional(CTCarrier (0x237e37fa9) {
 Carrier name: [ドコモ]
 Mobile Country Code: [440]
 Mobile Network Code:[10]
 ISO Country Code:[jp]
 Allows VOIP? [YES]
 }
 */


print(CTTelephonyNetworkInfo().currentRadioAccessTechnology)
//=> Optional("CTRadioAccessTechnologyLTE")

★ キャリアに変更があった場合に呼ばれる(未検証)

let telephonyNetworkInfo = CTTelephonyNetworkInfo()

telephonyNetworkInfo.subscriberCellularProviderDidUpdateNotifier = { (carrier) in
    print(carrier)
}

★ 通信規格に変更があった場合に呼ばれる通知を登録(未検証)

NSNotificationCenter.defaultCenter().addObserverForName(CTRadioAccessTechnologyDidChangeNotification, object: nil, queue: NSOperationQueue.mainQueue()) { (notification) in
    
    print("CTRadioAccessTechnologyDidChangeNotification")
}

★ 電話がかかってきてバックグラウンドへ遷移時のみ処理をしないというサンプル

import UIKit
import CoreTelephony

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    
    let callCenter = CTCallCenter()
    var isCallBackgroud: Bool = false


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        
        callCenter.callEventHandler = { (call) -> () in
            
            print(call.callState)
            
            if call.callState == CTCallStateIncoming {
                
                // 電話がかかってきた場合に呼ばれるハンドラ(フラグを変更しています。)
                self.isCallBackgroud = true
            }
        }
       
        return true
    }

    func applicationWillResignActive(application: UIApplication) {
        print("willResignActive")
        
        
        if isCallBackgroud {
            // 電話がかかってきてバックグラウンドへ遷移した場合
            isCallBackgroud = false
            return
        }
        
        // バックグラウンド処理を記述
    }

    func applicationDidEnterBackground(application: UIApplication) {
        print("didEnterBackground")
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment