【发布时间】:2018-12-30 09:55:22
【问题描述】:
我正在使用 VOIP 服务构建应用程序。现在我将我的应用程序与CallKit 集成以处理来电请求。
当应用程序停留在前台或后台时,它们在接听电话时工作正常。但问题是,当屏幕被锁定时,我试图接听电话,但不幸的是,即使我解锁了屏幕,我也无法听到双方的声音。
如何解决这个问题?
这是来电报告的方式:
func reportIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((NSError?) -> Void)?) {
// 1.
print("This is UUID === ", uuid)
configureAudioSession()
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .phoneNumber, value: handle)
update.hasVideo = hasVideo
provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error == nil {
// 3.
self.configureAudioSession()
let call = CallKitCallInit(uuid: uuid, handle: handle)
self.callKitManager.add(call: call)
lastCallUUID = uuid
print("UUID === ", uuid)
} else {
}
// 4.
completion?(error as NSError?)
}
}
这就是我设置音频的方式
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do{
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
} catch {
print("========== Error in setting category \(error.localizedDescription)")
}
do {
try session.setMode(AVAudioSessionModeVoiceChat)
} catch {
print("========= Error in setting mode \(error.localizedDescription)")
}
do {
try session.setPreferredSampleRate(44100.0)
} catch {
print("======== Error setting rate \(error.localizedDescription)")
}
do {
try session.setPreferredIOBufferDuration(0.005)
} catch {
print("======== Error IOBufferDuration \(error.localizedDescription)")
}
do {
try session.setActive(true)
} catch {
print("========== Error starting session \(error.localizedDescription)")
}
}
当我在屏幕锁定时接听电话时,我可以看到它在configureAudioSession() 函数中引发的错误。
为什么锁屏时无法设置音频?
【问题讨论】:
-
那成功了吗?
-
@WorieN 我通过在
provider(_ provider: CXProvider, perform action: CXAnswerCallAction)CXProviderDelegate 函数中添加action.fulfill()来做到这一点 -
@WorieN 查看我的答案以获取更多详细信息。这对我有用。
标签: ios swift avaudiosession linphone callkit