美文网首页iOS学习
iOS详解监听系统来电(2016/06)

iOS详解监听系统来电(2016/06)

作者: 70岁了还要浪 | 来源:发表于2016-06-01 21:10 被阅读2579次

    最近再做视频播放的项目,有个需求就是监听系统来电,遇到一些小坑,找不到合适的资料,于是总结一下。

    <p>代码如下:

    CoreTelephony/CTCallCenter框架定义了一个在app运行时,监听来电的block,用来app处理在来电时的各种情况。

    在回调中,定义了四周类型:
    </p><pre><code>这是一个代码区块。
    </code>p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #78492a}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #78492a}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

    import <Foundation/Foundation.h>

    import <CoreTelephony/CoreTelephonyDefines.h>

    NS_ASSUME_NONNULL_BEGIN

    CORETELEPHONY_EXTERN NSString * const CTCallStateDialing __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
    CORETELEPHONY_EXTERN NSString * const CTCallStateIncoming __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
    CORETELEPHONY_EXTERN NSString * const CTCallStateConnected __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);
    CORETELEPHONY_EXTERN NSString * const CTCallStateDisconnected __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

    CORETELEPHONY_CLASS_AVAILABLE(4_0)</pre>

    这个block,在来电时,会被调用多次,第一次触发CTCallStateIncoming,当无人接听或者挂断,会再次调用block,触发CTCallStateDisconnected,有人接听触发CTCallStateConnected,所以,这个block至少会触发两次,最多触发四次。

    注:CTCallCente必须用全局
    </p><pre><code>
    //
    // ViewController.m
    // cll
    //
    // Created by ChangQing Yang on 16/6/1.
    // Copyright © 2016年 ChangQing Yang. All rights reserved.
    //

    import "ViewController.h"

    //导入系统的头文件

    import <CoreTelephony/CTCallCenter.h>

    import <CoreTelephony/CTCall.h>

    @interface ViewController ()

    @property(nonatomic,strong)CTCallCenter *callCenter; //必须在这里声明,要不不会回调block

    @end

    @implementation ViewController

    • (void)viewDidLoad {

      [super viewDidLoad];

      _callCenter = [[CTCallCenter alloc] init];

      _callCenter.callEventHandler=^(CTCall* call){

        if([call.callState isEqualToString:CTCallStateDisconnected])
            
        {
            NSLog(@"Call has been disconnected");
        }
        
        else if([call.callState isEqualToString:CTCallStateConnected])
            
        {
            NSLog(@"Callhasjustbeen connected");
        }
        
        else if([call.callState isEqualToString:CTCallStateIncoming])
            
        {
            NSLog(@"Call is incoming");
        }
        
        else if([call.callState isEqualToString:CTCallStateDialing])
            
        {
            NSLog(@"Call is Dialing");
        }
        
        else
        {
            NSLog(@"Nothing is done");
        }
      

      };

    } </pre>

    小结:
    根据需求来做相应block里面回调的处理,注意考虑在block里面操作的时候要定义__bolck。
    如发现错误或不足,欢迎指正,如有需要,联系qq 1392550437.
    谢谢。

    相关文章

      网友评论

      • 陈藩:可以监听到现在来电的电话号码么
      • 凯文Kevin21:楼主,我App在后台运行的时候怎么监听手机来电状态?
        Wang66:@秋秋书起 同问
        a47fa58a4417:楼主,你在后台监听来电的解决了么。。。。怎么解决。。。。。

      本文标题:iOS详解监听系统来电(2016/06)

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