iOS 10から、サードパーティアプリから電話関係の操作を可能にするCallKitが追加された。今までは、CoreTelephonyを使ってイベントを検知できていたが、iOS10からはCallKitが推奨されているので、せっかくなのでSwift4でコードを書き直し。
import CallKit
で、CallKitをクラスに追加CXCallObserver
をインスタンス化CXCallObserverDelegate
を実装し、CXCallObserver
にdelegateを設定CXCallObserverDelegate
は、callObserver(callObserver:call:)
メソッドを実装する必要がある
- 電話イベントが発生すると、
callObserver(callObserver:call:)
メソッドが呼ばる - call変数(CXCallクラス)の
hasEnded
hasConnected
isOnHold
isOutgoing
の4つの真偽値を使ってイベントの内容を判定できる - 例えば、以下のコードで4つの状態(Dialing,Incoming,Connected,Disconnected)を判定できる
isOutgoing
を見れば「着信」か「発信」が一発で分かったりと、慣れると真偽値を使った判定も便利かも。参考にしたサイト上のコードだと、「受信時のDisconnectedイベント」が上手く検知できていなかったので、そこを修正。
参考資料
https://developer.apple.com/documentation/callkit
https://stackoverflow.com/questions/40021317/get-phone-call-states-in-ios-10
Categories: