美文网首页
ios监听系统来电

ios监听系统来电

作者: 米米0311 | 来源:发表于2018-01-22 15:44 被阅读0次

    最近在做音视频通话,其中有一个需求是当用户接听电话时退回到主界面,遇到了一下问题,跟大家分享一下。
    CoreTelephony/CTCallCenter框架定义了在app运行时监听来电的block,用来处理app在来电时的各种情况。
    首先在需要监听来电的控制器的.m中引入头文件import <CoreTelephony/CTCallCenter.h>, import <CoreTelephony/CTCall.h>,定义属性,必须在属性中声明,要不不会回调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监听系统来电

          本文链接:https://www.haomeiwen.com/subject/bdglaxtx.html