iOS如何检查当前是否正在通话

时间:2012-06-08 02:25:03

标签: iphone objective-c ios xcode phone-call

我环顾四周,我能找到的就是检查CTCallCenter的callState。但是,这可以通过监听事件来实现 - 根据应用程序是处于活动状态还是暂停/恢复,事件可以在不同时间引发。

我需要的不是听取事件,而是在连接呼叫时被告知,我想决定自己何时询问呼叫是否已连接。

使用案例:当连接电话时 - 用户知道并将始终点击应用程序图标,这将打开应用程序。这时我只想运行一个快速功能来检查当前是否正在通话。

这甚至可能吗?

4 个答案:

答案 0 :(得分:27)

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

-(bool)isOnPhoneCall {
    /*

     Returns TRUE/YES if the user is currently on a phone call

     */

    CTCallCenter *callCenter = [[[CTCallCenter alloc] init] autorelease];
    for (CTCall *call in callCenter.currentCalls)  {
        if (call.callState == CTCallStateConnected) {
            return YES;
        }
    }
    return NO;
}

答案 1 :(得分:25)

CTCallCenter对象的currentCalls属性是当前调用的NSSet。如果有呼叫则currentCalls属性应为!= nil。

如果您想知道是否实际连接了任何呼叫,那么您必须遍历当前呼叫并检查callState以确定它是否为CTCallStateConnected。< / p>

答案 2 :(得分:6)

感谢ThomasW的回答。我以为我也会发布代码。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    CTCallCenter *ctCallCenter = [[CTCallCenter alloc] init];
    if (ctCallCenter.currentCalls != nil) 
    {
        NSArray* currentCalls = [ctCallCenter.currentCalls allObjects];
        for (CTCall *call in currentCalls)
        {   
            if(call.callState == CTCallStateConnected)
            {
                // connected
            }
        }
    }
}

答案 3 :(得分:1)

我遇到了同样的问题,但是我认为从 iOS 10 执行此操作的正确方法是:

func checkForActiveCall() -> Bool {
    for call in CXCallObserver().calls {
        if call.hasEnded == false {
            return true
        }
    }
    return false
}