2017-06-13 49 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) { 
    //... 
}]; 

我想幫助您更多地編寫代碼,但是我正在寫一部手機,我不記得如何訪問通話的信息​​。

我希望能幫到你