美文网首页
iOS电话状态监听

iOS电话状态监听

作者: 笑笑菜鸟 | 来源:发表于2021-04-06 10:28 被阅读0次

一、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之后

iOS10及之后使用Callkit中的CXCallObserver和CXCall

1、导入:

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

2、使用:

a、设置代理

    self.callObserver = [CXCallObserver new];
    [self.callObserver setDelegate:self queue:dispatch_get_main_queue()];

b、实现协议CXCallObserverDelegate方法

//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
     */
}

[参考:]https://www.jianshu.com/p/e27b1a609c1a

相关文章

网友评论

      本文标题:iOS电话状态监听

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