iOS电话状态监听

一、iOS10之前

iOS10之前使用CoreTelephony中的CTCallCenter和CTCall。

1、导入:

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

2、使用

self.callCenter = [CTCallCenter new];
    
    __weak ViewController *weakSelf = self;
    self.callCenter.callEventHandler = ^(CTCall *call) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if ([call.callState isEqualToString:CTCallStateDialing]) {
                NSLog(@"电话主动拨打电话");
            } else if ([call.callState isEqualToString:CTCallStateConnected]) {
                NSLog(@"电话接通");
                weakSelf.startDate = [NSDate date];
            } else if ([call.callState isEqualToString:CTCallStateDisconnected]) {
                NSLog(@"电话挂断");
                weakSelf.endDate = [NSDate date];
                [weakSelf called];
            } else if ([call.callState isEqualToString:CTCallStateIncoming]) {
                NSLog(@"电话被叫");
            } else {
                NSLog(@"电话其他状态");
            }
        });
    };

二、iOS10之后

1、导入:

#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>

2、使用:

// 1、设置代理
self.callObserver = [CXCallObserver new];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
// 2、回调
//MARK: CXCallObserverDelegate
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {

    NSLog(@"outgoing :%d  onHold :%d   hasConnected :%d   hasEnded :%d",call.outgoing,call.onHold,call.hasConnected,call.hasEnded);
    /*
     拨打:  outgoing :1  onHold :0   hasConnected :0   hasEnded :0
     拒绝:  outgoing :1  onHold :0   hasConnected :0   hasEnded :1
     链接:  outgoing :1  onHold :0   hasConnected :1   hasEnded :0
     挂断:  outgoing :1  onHold :0   hasConnected :1   hasEnded :1
     对方未接听时挂断:  outgoing :1  onHold :0   hasConnected :0   hasEnded :1
     
     新来电话:    outgoing :0  onHold :0   hasConnected :0   hasEnded :0
     保留并接听:  outgoing :1  onHold :1   hasConnected :1   hasEnded :0
     另一个挂掉:  outgoing :0  onHold :0   hasConnected :1   hasEnded :0
     保持链接:    outgoing :1  onHold :0   hasConnected :1   hasEnded :1
     对方挂掉:    outgoing :0  onHold :0   hasConnected :1   hasEnded :1
     */
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容