即使从后台拦截来自你应用的呼叫也是如此

来自 Apple 文档:

使用 CTCallCenter 类获取当前蜂窝呼叫的列表,并响应呼叫的状态更改,例如从拨号状态到连接状态。这种状态变化称为蜂窝呼叫事件。

CTCallCenter 的目的是让开发人员有机会在通话期间暂停其应用状态,以便为用户提供最佳体验。

Objective-C 的:

首先,我们将在要处理拦截的类中定义一个新的类成员:

@property (atomic, strong) CTCallCenter *callCenter;

在我们的类 init(构造函数)中,我们将为类成员分配新内存:

[self setCallCenter:[CTCallCenter new]];

之后,我们将调用实际处理拦截的新方法:

- (void)registerPhoneCallListener
{
[[self callCenter] setCallEventHandler:^(CTCall * _Nonnull call) {
    NSLog(@"CallEventHandler called - interception in progress");

     if ([call.callState isEqualToString: CTCallStateConnected])
     {
         NSLog(@"Connected");
     }
     else if ([call.callState isEqualToString: CTCallStateDialing])
     {
         NSLog(@"Dialing");
     }
     else if ([call.callState isEqualToString: CTCallStateDisconnected])
     {
         NSLog(@"Disconnected");

     } else if ([call.callState isEqualToString: CTCallStateIncoming])
     {
         NSLog(@"Incomming");
     }
 }];
}

就是这样,如果用户将使用你的应用程序并接到电话,你可以拦截此呼叫并处理你的应用程序以进行保存状态。

值得一提的是,你可以拦截 4 种呼叫状态:

CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected

迅速:

在相关类中定义你的类成员并定义它:

    self.callCenter = CTCallCenter()
    self.callCenter.callEventHandler = { call in
        //  Handle your interception
        if call.callState == CTCallStateConnected
        {
        }
    }

如果你的应用程序在后台并且你需要在应用程序处于后台时拦截呼叫,会发生什么?

例如,如果你开发企业应用程序,你基本上只需在功能选项卡中添加 2 个功能(VOIP 和后台获取):

你的项目目标 - >功能 - >背景模式 - >标记 IP 语音和后台提取