如何恢复保持CallKit呼叫

时间:2017-06-13 15:55:50

标签: ios objective-c callkit

我在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) {
        //...
    }];
}

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

感谢。

1 个答案:

答案 0 :(得分:2)

系统仅通知您呼叫已结束(使用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) {
    //...
}];

我想帮助您更多地编写代码,但我正在使用手机写信,而且我不记得如何访问通话信息。

我希望它对你有帮助