繁体   English   中英

如何恢复保留的CallKit呼叫

[英]How to resume a CallKit call on hold

我在我的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以了解该呼叫是否是应用程序的呼叫。 如果:

  • 应用程式有通话中,
  • 它被搁置,
  • 并且在方法中作为参数接收的呼叫不是您的呼叫(UUID不等于)
  • 并且作为参数接收的呼叫已结束,

那么您可以通过以下方式退出保留的通话:

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

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

我想帮助您更多地编写代码,但是我在用手机书写,所以我不记得如何访问通话信息。

希望对您有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM