呼叫计时器在被叫方接受呼叫后立即开始计数(call timer ios app)

在 CallKit 文档https://developer.apple.com/documentation/callkit有一个文本:

在 CallKit 文档https://developer.apple.com/documentation/callkit有一个文本:

连接调用后,系统将调用提供程序委托的 provider (_:perform:) 方法。在您的实现中,委托负责配置 AudioSession 并在完成时对操作调用 fulfill ()。

和代码片段:

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    // configure audio session
    action.fulfill()
}

关于fulfill ()方法:

只能从 CXProviderDelegate 方法的实现调用此方法。

所以,正如我所理解的,我们应该调用 action.fulfill()立即,在被调用者接受一个电话。

问题:当设备被锁定时,在本地 CallKit 屏幕的呼叫计时器开始计数,但是连接尚未建立。

问:当连接建立时,如何调用 action.fulfill()或在锁定的 CallKit 屏幕上启动计时器?

1

预计您在此委托回调中调用应答逻辑

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    // configure audio session
    // Performing call answering logic
    // Call action to fulfill after answering logic is finished
    action.fulfill()
}

我使用 PJSIP 的 VoIP 通话,这是我的回答逻辑是这样的

func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
    guard let call = CallList.sharedInstance().call(withUUID: action.callUUID.uuidString) else {
        action.fail()
        return
    }
    CallAudio.configureAudioSession()
    // Answer call (signal Pjsua)
    Pjsua2Wrapper.sharedInstance()?.answerCall(withCallUUID: call.callUUID, completion: { error in
        if error != nil {
            // we have error on answer call
            action.fail()
        } else {
            action.fulfill()
        }
    })
}

应答完成时调用应答调用的完成处理程序,因此计时器将在连接呼叫时启动。

EDIT

PJSIP 的声音问题

如果使用 PJSIP,则需要在初始化 PJSIP 时停止音频 I / O,就像这样(它是 C ++):

enableSoundDevice( false );

And when call is answered,CallKitwill respond with funcprovider(_:didActivate:).That is where you need to activate the PJSIP sound device in order to have the sound.

这是我的代码中的示例:

func provider(_ provider: CXProvider, didActivate audioSession: AudioSession) {
    // Start call audio I/O once CallKit activates AudioSession
    Pjsua2Wrapper.sharedInstance()?.enableSoundDevice(true)
}

而且,当然,当呼叫结束或设置为保持时,当CallKitprovider(_:didDeactivate:)响应时,您将再次禁用 PJSIP 声音设备,仅此而已

func provider(_ provider: CXProvider, didDeactivate audioSession: AudioSession) {
    // Stop call audio IO
    Pjsua2Wrapper.sharedInstance()?.enableSoundDevice(false)
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(881)
从Excel中的列A中删除所有重复项
上一篇
在 LateX中更改引文样式
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(18条)