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

fri*_*end 24 iphone xcode objective-c phone-call ios

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

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

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

这甚至可能吗?

AlB*_*ebe 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;
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*asW 25

CTCallCenter对象具有currentCalls属性,该属性是NSSet当前调用的属性.如果有电话,那么该currentCalls属性应为!= nil.

如果您想知道是否实际连接了任何呼叫,那么您必须遍历当前呼叫并检查callState以确定它是否CTCallStateConnected存在.


fri*_*end 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用快速枚举来缩短此代码:`for(CTCall*call in ctCallCenter.currentCalls){...}`.您不需要检查`nil`或将集转换为数组. (2认同)