iOS 即使在后台也拦截来自您应用的呼叫

示例

从Apple文档中:

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

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

目标C:

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

@property (atomic, strong) CTCallCenter *callCenter;

在我们的类初始化(构造函数)内部,我们将为我们的类成员分配新的内存:

[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
        //  处理您的拦截
        ifcall.callState== CTCallStateConnected
        {
        }
    }


如果您的应用程序在后台,并且您需要在应用程序在后台时监听来电,将会发生什么?

例如,如果您开发企业应用程序,则基本上可以仅在“功能”选项卡中添加2个功能(VOIP和后台获取):

您的项目目标->功能->后台模式->标记IP语音和后台获取