用户点击通话按钮并拨打电话然后返回到应用程序后,我想执行一个操作。

这是我拨打电话的功能:

let phoneURL = URL(string: String(format: "tel://%@", phoneNumber.englishNumbers))
UIApplication.shared.open(phoneURL!)

并且我在CallView中的viewDidLoad()上设置了一个观察者,如下所示:
NotificationCenter.default.addObserver(self, selector: #selector (showFeedBack), name: UIApplication.didEnterBackgroundNotification, object: nil)

拨打电话并按下“结束”按钮(结束通话的红色按钮)后。就会出现CallView,但不会调用该通知。

我在使用正确的通知吗?还是这是检测用户何时通过您的应用拨打电话并返回的正确方法?

附言我使用了willResignActiveNotification通知。但是它甚至在拨打电话之前就发送通知(当出现警报且用户尚未选择任何内容时)

最佳答案

您可以使用CXCallObserver监听 call 事件,如下所示,

import CallKit

class ViewController: UIViewController, CXCallObserverDelegate {

    let co = CXCallObserver()

    override func viewDidLoad() {
        super.viewDidLoad()

        co.setDelegate(self, queue: DispatchQueue.main)
    }

    func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
        if call.hasEnded {
            print("Call is ended")
        }
        if call.hasEnded == false && call.hasConnected {
            print("Call is connected")
        }
        if call.isOutgoing {
            print("This is an outgoing call")
        } else if call.hasEnded == false && call.hasConnected == false {
            print("This is an incoming call")
        }
    }
}

07-28 03:24