gpt4 book ai didi

ios - CallKit:如何区分拒绝调用和结束连接调用

转载 作者:行者123 更新时间:2023-12-01 18:06:49 26 4
gpt4 key购买 nike

假设一个应用程序一次支持两个调用。第一个电话已接通,第二个电话打进来。一个得到“结束通话和接听电话”、“拒绝”、“保持通话和接听电话”按钮。

如果是“挂断接听电话”,则表示结束已接通的通话并接听新来电。
在“拒绝”的情况下,意味着拒绝来电。

在这两种情况下,代表

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

被触发。现在,如何知道要结束哪些调用,来电还是已接通的调用? CXEndCallAction没有说明“拒绝”或“结束已连接调用”的原因

有没有人有办法解决吗?

最佳答案

我发现有一个事务列表委托(delegate):

- (BOOL)provider:(CXProvider *)provider executeTransaction:(CXTransaction *)transaction

如果有一个事务会触发其他委托(delegate),例如 CXSetHeldCallAction,那么实现这个委托(delegate)将提供足够的信息。或 CXEndCallAction .所以现在我可以决定触发什么 Action ,并在必要时绕过其他代表。

如果其他人在苦苦挣扎,这是我的代码:
- (BOOL)provider:(CXProvider *)provider executeTransaction:(CXTransaction *)transaction
{
NSLog(@"executeTransaction : %@", transaction.debugDescription);
BOOL callEnd = NO;
BOOL callHold= NO;
BOOL callAnswer = NO;

NSPredicate *filter = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [CXEndCallAction class]];
NSArray *ends = [transaction.actions filteredArrayUsingPredicate:filter];
callEnd = [ends count] >= 1;

filter = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [CXAnswerCallAction class]];
NSArray *answer = [transaction.actions filteredArrayUsingPredicate:filter];
callAnswer = [answer count] >= 1;

filter = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [CXSetHeldCallAction class]];
NSArray *hold = [transaction.actions filteredArrayUsingPredicate:filter];
callHold = [hold count] >= 1;

if(callEnd && callAnswer)
{
actionType = kCallKitEndAndAnswer;
[[MyCallManager sharedManager] endPreviousCallAndAnswerNewCall:^(BOOL succeeded) {
NSLog(@"end answered call: %@", succeeded ? @"yes" : @"No");
CXEndCallAction *en = [ends firstObject];
succeeded ? [en fulfill] : [en fail];

CXAnswerCallAction *an= [answer firstObject];
succeeded ? [an fulfill] : [an fail];

}];
return YES;
}
else if(callHold && callAnswer)
{
actionType = kCallKitHoldAndAnswer;

[[MyCallManager sharedManager] answerCall:^(BOOL succeeded) {
NSLog(@"hold answered call: %@", succeeded ? @"yes" : @"No");
CXSetHeldCallAction *ho = [hold firstObject];
succeeded ? [ho fulfill] : [ho fail];

CXAnswerCallAction *an= [answer firstObject];
succeeded ? [an fulfill] : [an fail];
}];
return YES;
}
else if([hold count] == 2)
{
[[MyCallManager sharedManager] swapCalls];
usleep(25000);
CXSetHeldCallAction * fi = [hold firstObject];
CXSetHeldCallAction * la = [hold lastObject];
[fi fulfill];
[la fulfill];

return YES;
}

return NO;
}

关于ios - CallKit:如何区分拒绝调用和结束连接调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40928972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com