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")
}
}