从 phone 通话返回后从 notificationCenter 收到通知
get a notification from notificationCenter after returning from a phone call
我想在用户点击通话按钮并拨打电话然后返回应用程序后执行操作。
这是我进行 phone 调用的函数:
let phoneURL = URL(string: String(format: "tel://%@", phoneNumber.englishNumbers))
UIApplication.shared.open(phoneURL!)
并且我在 viewDidLoad()
中的 CallView
上设置了一个观察者,如下所示:
NotificationCenter.default.addObserver(self, selector: #selector (showFeedBack), name: UIApplication.didEnterBackgroundNotification, object: nil)
在我拨打电话并按下“结束”按钮(结束通话的红色按钮)之后。 CallView
会出现,但不会调用通知。
我使用的通知是否正确?或者这是检测用户何时通过您的应用拨打 phone 电话并返回的正确方法吗?
P.S。我使用了 willResignActiveNotification
通知。但它甚至在拨打电话之前就发送了通知(当出现警报并且用户还没有 select 任何东西时)
您可以使用CXCallObserver
监听如下调用事件,
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")
}
}
}
我想在用户点击通话按钮并拨打电话然后返回应用程序后执行操作。
这是我进行 phone 调用的函数:
let phoneURL = URL(string: String(format: "tel://%@", phoneNumber.englishNumbers))
UIApplication.shared.open(phoneURL!)
并且我在 viewDidLoad()
中的 CallView
上设置了一个观察者,如下所示:
NotificationCenter.default.addObserver(self, selector: #selector (showFeedBack), name: UIApplication.didEnterBackgroundNotification, object: nil)
在我拨打电话并按下“结束”按钮(结束通话的红色按钮)之后。 CallView
会出现,但不会调用通知。
我使用的通知是否正确?或者这是检测用户何时通过您的应用拨打 phone 电话并返回的正确方法吗?
P.S。我使用了 willResignActiveNotification
通知。但它甚至在拨打电话之前就发送了通知(当出现警报并且用户还没有 select 任何东西时)
您可以使用CXCallObserver
监听如下调用事件,
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")
}
}
}