电话状态监听之 iOS10 - iOS

近期 iOS 10 新特性中萌生出了新的 Callkit,故此对之前的 电话状态监听 - iOS 进行更新,特此针对 iOS 10 的新特性特此更新,顺便优化一下项目中的方法;

首先,通过项目中声明参数和方法实现中的提示信息可以得知一些新的替代方法,具体提示信息如下:

'CTCallCenter' is deprecated: first deprecated in iOS 10.0 - Replaced by CXCallObserver from CallKit.framework

'CTCallCenter' is deprecated: first deprecated in iOS 10.0 - Replaced by CXCallObserver from CallKit.framework
'callEventHandler' is deprecated: first deprecated in iOS 10.0 - Replaced by <CallKit/CXCallObserver.h>

其次,根据官方文档介绍和如上提示信息内容便可以尝试新方法的更替,具体方法构造如下:

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

@interface YHManagementSystemVC () <CXCallObserverDelegate>

/** 呼叫中心*/
@property (nonatomic, strong) CXCallObserver *callObserver;


@end


@implementation YHManagementSystemVC

#pragma mark - ************************************ 监听相关
#pragma mark - 监听电话
/**
 监听电话介入
 */
- (void)monitorTelephoneCall {// 监听电话介入
    _callObserver = [[CXCallObserver alloc] init];
    [_callObserver setDelegate:self queue:dispatch_get_main_queue()];
}

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
    NSLog(@"call observer uuid: %@", call.UUID);
    NSLog(@"outgoing(拨打) :%d  onHold(待接通) :%d   hasConnected(接通) :%d   hasEnded(挂断) :%d",call.outgoing,call.onHold,call.hasConnected,call.hasEnded);
    /*
     https://developer.apple.com/documentation/callkit/cxcall
     
     挂断    outgoing(拨打) :0  onHold(待接通) :0   hasConnected(接通) :0   hasEnded(挂断) :1
     拨打    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(拨打) :0  onHold(待接通) :0   hasConnected(接通) :1   hasEnded(挂断) :0  (接通)
            outgoing(拨打) :0  onHold(待接通) :0   hasConnected(接通) :1   hasEnded(挂断) :1  (接通 - 挂断)
     */
    if (call.hasConnected) {
        kWeakSelf(self);// #define kWeakSelf(type)   __weak typeof(type) weak##type = type;
        dispatch_async(dispatch_get_main_queue(), ^{
            // do somethings
        });
    }
}


- (void)dealloc {
    [_callObserver setDelegate:nil queue:dispatch_get_main_queue()];// 注:防止意外,在控制器销毁时 把 delegate 设为 nil
    _callObserver = nil;
}

@end

最后,实现如上基础方法之后再根据不同的需求进行详细的后续业务逻辑即可。


以上便是此次分享的全部内容,希望内容能对大家实际有所帮助,有什么不足之处欢迎指点共同进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值