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

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

<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.
谢谢。

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

推荐阅读更多精彩内容

  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,259评论 1 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,556评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,255评论 4 61
  • 一晃儿我就呆了十二个工地了。 每每回顾回家、出行那些片段,不免肠断。进入新疆前我都是提前十天订票楞是搞不到,后托熟...
    骑手为什么歌唱草原阅读 381评论 0 1
  • 奇妙的3月6号。 修理了三台电脑,仅仅失败了一台而已,这给我自己和整个部门带来了久违的成就感。 这么一个收获在认识...
    秋天还不黄的树阅读 285评论 0 0