ios监听系统来电

最近在做音视频通话,其中有一个需求是当用户接听电话时退回到主界面,遇到了一下问题,跟大家分享一下。
CoreTelephony/CTCallCenter框架定义了在app运行时监听来电的block,用来处理app在来电时的各种情况。
首先在需要监听来电的控制器的.m中引入头文件import , import ,定义属性,必须在属性中声明,要不不会回调block
*注:这里没有测试,自己代码就是这么写的,参考别人的文章-

@interface ViewController ()

@property(nonatomic, strong) CTCallCenter *callCenter; //必须在这里声明,要不不会回调block

@end

具体的代码如下所示,代码写在viewDidLoad中

- (void)receiveCall {
    self.callCenter = [[CTCallCenter alloc] init];
    self.callCenter.callEventHandler = ^(CTCall * call) {
        if([call.callState isEqualToString:CTCallStateDisconnected]) {
            NSLog(@"Call has been disconnected");//电话被挂断(我们用的这个)
        } else if([call.callState isEqualToString:CTCallStateConnected]) {
            NSLog(@"Call has been connected");//电话被接听
        } else if([call.callState isEqualToString:CTCallStateIncoming]) {
            NSLog(@"Call is incoming");//来电话了
        } else if([call.callState isEqualToString:CTCallStateDialing]) {
            NSLog(@"Call is Dialing");//拨号
        } else {
            NSLog(@"Nothing is done");
        }
    };
}

总结下自己实现功能时遇到的坑,因为我多个界面要监听电话的接入,刚开始遇到了来电话时崩溃的情况,解决方法是每次在界面push或是dismiss时把self.callCenter置为nil。

附加容易被忽略的一个点:self.callCenter.currentCalls去判断当前是否有电话

你可能感兴趣的:(ios监听系统来电)