iOS 10から、サードパーティアプリから電話関係の操作を可能にするCallKitが追加された。今までは、CoreTelephonyを使ってイベントを検知できていたが、iOS10からはCallKitが推奨されているので、せっかくなのでSwift4でコードを書き直し。
import CallKitで、CallKitをクラスに追加CXCallObserverをインスタンス化CXCallObserverDelegateを実装し、CXCallObserverにdelegateを設定CXCallObserverDelegateは、callObserver(callObserver:call:)メソッドを実装する必要がある
- 電話イベントが発生すると、
callObserver(callObserver:call:)メソッドが呼ばる - call変数(CXCallクラス)の
hasEndedhasConnectedisOnHoldisOutgoingの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: