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