iOS电话拨打与接听事件监听方案

3,122 阅读1分钟

前言

前文写了一篇关于CallKit的SDK替换的文章,当时因为考虑不周,替换之后发现该SDK国内禁止使用,无法上架,于是换回了原先的SDK,目前已上架,各位看官可以放心使用。

正文

导入库

#import <CoreTelephony/CTCall.h>
#import <CoreTelephony/CTCallCenter.h>

应用

为了方便在不同的地方使用,建议使用全局变量的形式初始化,然后使用如下核心代码进行逻辑处理

// 初始化
@property (strong, nonatomic) CTCallCenter * callCenter;


	self.callCenter = [[CTCallCenter alloc] init];
    self.callCenter.callEventHandler = ^(CTCall *call) {
        @strongify(self);
        if ([call.callState isEqualToString:CTCallStateDisconnected]) {
            dispatch_async(dispatch_get_main_queue(), ^{
                @strongify(self);
                //断开电话需要进行的操作
                
            };
        } else if([call.callState isEqualToString:CTCallStateIncoming]) {
           dispatch_async(dispatch_get_main_queue(), ^{
                @strongify(self);
                //来电时需要进行的操作

            };
        } else {
            DLog(@"未知");
        }
    };

扩展

对于当前项目来说,用到的只有两种情况,系统提供了四种情况可以判别,需要的可以自行在需要的场景中尝试

CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected

尾声

以上就是iOS中对于电话接听与挂断监听的方法,实际并没有很难的内容,这次吸取了一个很严重的问题,就是任何事情在实际应用之前一定要进行充分的调研之后再做决策,不然就会出现不可预测的问题,导致浪费时间,并做了相对无用的工作。