gpt4 book ai didi

ios - 如何恢复保持的 CallKit 通话

转载 作者:行者123 更新时间:2023-11-28 21:08:38 42 4
gpt4 key购买 nike

我在我的 Objective-C 应用程序中使用 CallKit。

我可以使用 CallKit 调用电话。如果有第二个电话打进来,我成功地将其设置为保持状态。当我结束第二个电话时,

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call

确实会调用方法。

但是

 - (void)provider:(CXProvider *)provider performSetHeldCallAction:(CXSetHeldCallAction *)action

方法不会被自动调用。

我是否必须手动触发它,例如通过类似的方法

- (void)performHoldCallActionWithUUID:(NSUUID *)uuid onHold:(BOOL)onHold {
//...

CXSetHeldCallAction *holdCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:uuid onHold:onHold];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:holdCallAction];

[self.callKitCallController requestTransaction:transaction completion:^(NSError *error) {
//...
}];
}

或者有没有办法让提供者在用户结束第二次通话时“自动”调用它?

谢谢。

最佳答案

系统只会通知您通话结束(使用 UUID)和通话状态已更改,但不会更改您的通话状态,您需要手动执行此操作。

当系统通知您时,一个选项从暂停中退出

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call

对于这样做,您会收到已更改的调用,并且您可以访问调用的 UUID。可以知道通话结束了,对比UUID就知道这个通话是不是app的调用。如果:

  • 应用有一个活跃的通话,
  • 它被搁置了,
  • 并且在方法中作为参数收到的调用不是您的调用(UUID 不等于)
  • 作为参数接收的调用结束,

然后您可以通过以下方式退出保持通话:

CXSetHeldCallAction *holdCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:appCallUUID onHold:NO];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:holdCallAction];

[self.callKitCallController requestTransaction:transaction completion:^(NSError *error) {
//...
}];

我想帮你多写代码,但是我是用手机写的,不记得怎么访问call的信息。

希望对你有帮助

关于ios - 如何恢复保持的 CallKit 通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44526342/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com