2017-06-13 2 views
0

Ich verwende CallKit in meiner Objective-C App.So setzen Sie einen gehaltenen CallKit-Anruf fort

Ich kann mit CallKit anrufen. Wenn ein zweiter Anruf eingeht, setze ich ihn erfolgreich in die Warteschleife. Als ich den zweiten Anruf zu beenden, die

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action 

und die

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call 

Methoden werden aufgerufen.

Aber die

- (void)provider:(CXProvider *)provider performSetHeldCallAction:(CXSetHeldCallAction *)action 

Methode wird nicht automatisch aufgerufen.

Muss ich es manuell auslösen, zum Beispiel von einem Verfahren wie

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

oder ist es eine Möglichkeit, die Anbieter sie „automatisch“ aufrufen zu machen, wenn der zweite Anruf durch den Benutzer beendet wird?

Danke.

Antwort

0

Das System benachrichtigt Sie nur, dass ein Anruf beendet (mit UUID) und ein Anrufstatus geändert wurde, aber es ändert nicht Ihren Anrufstatus, Sie müssen dies manuell tun.

eine Option aus der Warteschleife verlassen wird, wenn das System Sie durch benachrichtigen

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call 

Denn es tun, erhalten Sie den Anruf, geändert wurde und Sie können Anruf des UUID zuzugreifen. Sie können wissen, dass der Anruf beendet wurde, und UUID vergleichen, um zu erfahren, ob dieser Anruf der Anruf der App ist. If:

  • App einen aktiven Anruf hat,
  • und es wird gehalten,
  • und rufen als Parameter in Verfahren erhalten hat, wird Ihr Anruf (UUIDs sind nicht gleich)
  • und die rufen Sie erhielt als Parameter beendet wurde,

dann können Sie von halten Ihren Anruf beenden mit:

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

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

Ich möchte Ihnen helfen, mehr Code schreiben, aber ich schreibe in einem Mobiltelefon und ich erinnere mich nicht, wie auf Anrufinformationen zugreifen. Ich hoffe, dass es Ihnen

hilft
Verwandte Themen