2017-06-13 233 views
0

我在我的Objective-C应用程序中使用CallKit。如何恢复保留的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) { 
     //... 
    }]; 
} 

还是有办法让供应商称其为“自动”,当第二个电话是由用户结束了?

谢谢。

回答

0

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

我想帮助您更多地编写代码,但是我正在写一部手机,我不记得如何访问通话的信息​​。

我希望能帮到你