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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • App电话状态监听 一般这种获取系统状态变化的代码都是写在AppDelegate里面,在didFinishLaun...
    iLeooooo阅读 652评论 0 0
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,650评论 6 427
  • 前言 RxSwift的魅力想必用过的人都有心得体会,简直就是从入门到想放弃,从想放弃到爱不释手的过程。但是RxSw...
    Mr杰杰阅读 4,337评论 6 7
  • 今天朋友圈和微博都被高考的字眼刷屏了,当然,考生是没时间发朋友圈的,发评论的都是高考已经于他无关痛痒的人。不论是考...
    焦糖爆米花阅读 342评论 0 0
  • 杜康美酒思泉涌、清池墨染琥珀香 抽刀排浪浪不止、欲错花开花又来 执手沧海光破云、把酒嘲天是我闻 剑上雕镂韧孤魄、鼎...
    浅夏崇魂阅读 245评论 0 0