如何在CallKit中结束通话。

13

这不是一道给我代码的问题,而是一个可行性问题。如果我使用 CallKit 发起电话呼叫,是否也可以通过编程的方式结束通话?

3个回答

12

是的,我们可以通过编程实现,但是我们必须保留该调用的UUID。

CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
[cxcallcontrollerobject requestTransaction:[CXTransaction transactionWithActions:@[action]] completion:completion];


    + (CXTransaction *)transactionWithActions:(NSArray <CXAction *> *)actions { 
        CXTransaction *transcation = [[CXTransaction alloc] init]; 
        for (CXAction *action in actions) { 
           [transcation addAction:action]; 
        } 
        return transcation; 
 }

希望这能有所帮助。


1
我收到错误代码4,这意味着UUID无效。我正在传递与建立通话时使用的相同UUID。 - Saurabh Prajapati
不,我将其作为全局变量在 appDelegate 中。 - Saurabh Prajapati
1
我已经检查过UUID不是nil并且已经成功生成。 - Saurabh Prajapati
1
获取错误。没有已知的选择器“transactionWithActions”的类方法。 - Varinder Singh iPhone Dev
@VarinderSingh + (CXTransaction *)transactionWithActions:(NSArray <CXAction *> *)actions { CXTransaction *transcation = [[CXTransaction alloc] init]; for (CXAction *action in actions) { [transcation addAction:action]; } return transcation; } - RJV Kumar
显示剩余5条评论

8

关闭所有电话(Swift4)

func endCall(call: UUID) {

    let endCallAction = CXEndCallAction(call: call)
    let transaction = CXTransaction(action: endCallAction)
    cxCallController.request(transaction) { error in
        if let error = error {
            print("EndCallAction transaction request failed: \(error.localizedDescription).")
            self.cxCallProvider.reportCall(with: call, endedAt: Date(), reason: .remoteEnded)
            return
        }

        print("EndCallAction transaction request successful")

    }

}

1
嘿,reportCall方法似乎无法关闭CallKit UI,它对你有用吗? - vivek takrani
1
@vivektakrani如果无法将字符串转换为UUID,则执行以下操作: guard let uuid = UUID(uuidString: "CallId") else { return } self.cxCallProvider.reportCall(with: uuid, endedAt: Date(), reason: .remoteEnded) - Mohammad Razipour
1
注意:如果没有reportCall方法,状态栏颜色的更改可能会出现意外的延迟。 - jason d

4
在Swift中使用以下代码,uuidCallKit是我当前正在通话的呼叫的UUID。
let controller = CXCallController()
let transaction = CXTransaction(action: 
CXEndCallAction(call: uuidCallKit))controller.request(transaction,completion: { error in })

直截了当的回答,能够完成任务。谢谢! - Rick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接