CallKit有两个来电

我用CallKit开发了一个VoIP应用程序。

在用户接收两个来电并且他/她接受其中一个的情况下,另一个将被关闭。

例如,报告两个来电:

reportInComingCall uuid: 70D506FB-6A9D-4111-8828-35DB8F330A26 reportInComingCall uuid: 129A6D67-AC6A-480E-BCD7-ED14F7961CE5 

当用户接受其中一个时,我从CallKit获取此操作:

 perform action: CXEndCallAction uuid: 129A6D67-AC6A-480E-BCD7-ED14F7961CE5 perform action: CXAnswerCallAction uuid: 70D506FB-6A9D-4111-8828-35DB8F330A26 

问:是否可以在不关闭另一个电话的情况下接听一个电话?

最后,我需要以下场景:当我接受一个呼叫时,另一个呼叫保持不变直到我挂断第一个呼叫。 CallKit然后告诉我另一个我可以接受的。

拉尔夫

您需要设置为CXProviderConfiguration ,该应用程序允许呼叫分组和多个呼叫,例如

 let configuration = CXProviderConfiguration(localizedName: applicationName) configuration.supportsVideo = supportsVideo configuration.supportedHandleTypes = [.phoneNumber] configuration.maximumCallGroups = 3 configuration.maximumCallsPerCallGroup = 2 /// 2 calls max per call group. Excluding host call 

此外,您需要在接收传入呼叫时设置CXCallUpdate ,以告知CXProvider传入呼叫可以保持/不保持和分组

 let callUpdate = CXCallUpdate() callUpdate.supportsGrouping = true callUpdate.supportsUngrouping = true callUpdate.supportsHolding = true 

每次要报告对CXProvider的新传入呼叫时,请使用该更新

系统将让用户决定如何解决问题。 根据选择,它会将多个动作包含在CXTransaction中。 例如,如果用户选择结束正在进行的呼叫并回答新呼叫,则系统将为前者创建CXEndCallAction,为后者创建CXStartCallAction。 这两个操作都将被包装到一个事务中并发送给提供者,提供者将单独处理它们。 因此,如果您的应用已经知道如何满足各个请求,则无需采取进一步措施!

您可以通过解决上面的场景来测试它; 通话清单将反映您的选择。 该应用程序一次只能处理一个音频会话。 如果您选择恢复通话,则另一个将自动暂停。

有关更多信息,您可以按照该教程