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语音和后台获取