Callkit可以用于非VoIP呼叫以获取iOS中的通话状态吗?

9
我已经阅读了关于如何进行非voip呼叫的问题,似乎打开URL是唯一的方法。由于CoreTelephony已被弃用,是否可以使用Callkit在使用打开URL进行呼叫时获取呼叫状态?如果不行,有没有其他编程方式来获取呼叫状态?我正在开发一个内部应用程序。

如何使用CallKit进行非voip呼叫?

提前感谢!!


3
你找到解决方案了吗?我也在想是否可能在“普通”电话开始或结束时得到回调。 - Jan
1个回答

16

要在CallKit中获取通话状态,您可以在应用程序中使用CXCallObserver。

import CallKit

final class ProviderDelegate: NSObject, CXCallObserverDelegate { 
var callObserver: CXCallObserver!

func setupCallObserver(){
callObserver = CXCallObserver()
callObserver.setDelegate(self, queue: nil)
}

func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
        if call.hasEnded == true {
            print("CXCallState :Disconnected")
        }
        if call.isOutgoing == true && call.hasConnected == false {
            print("CXCallState :Dialing")
        }
        if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false {
            print("CXCallState :Incoming")
        }

        if call.hasConnected == true && call.hasEnded == false {
            print("CXCallState : Connected")
        }
    }
}

@Krishna 它正在观察每个调用,无论是本地调用还是应用内调用。是否可能仅跟踪本地调用?https://stackoverflow.com/questions/49257417/where-can-i-track-native-call-when-user-wants-to-call-through-app-on-another-dev?noredirect=1#comment85519416_49257417 - Hiren
@Hiren,你可以使用uuid来确定你的应用程序调用类似这样的东西,希望它对你有用。如果call.uuid == "你的uuid"。 - Krishna Kumar Thakur
不可能。我们使用变量callUUID:UUID = UUID()生成呼叫会话,因此无法预测本机呼叫和应用程序呼叫之间的区别。 - Hiren

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