簡體   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