今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家。
首先使用CTCallCenter监听电话的代码如下:
- CTCallCenter *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(@"Call has just been 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");
- }
- };
这是网上一段很通用的代码,而本人这么调用却无法获取电话状态改变的事件,一开始感觉到很奇怪,因为callCenter变量声明了之后,没有设置delegate也没有设置target,那么是如何监听的呢?而且更奇怪的是大家都是用这段代码成功接收到了电话状态的改变。
于是我猜测,一旦发生电话状态改变时,系统会自动监测应用程序中是否声明了CTCallCenter的实例,如果声明了,就调用其中的回调。那么这就很合理了,由于本人在工程中开启了ARC,callCenter在声明之后,一旦离开函数的作用域就被释放掉了(具体原因可参见ARC的原理)。而在未开启ARC之前,是不会被释放掉的。
知道了原因,那么解决方案也很明显了,将callCenter声明为成员变量即可。尝试之后,果不其然,问题解决了。
iOS ARC中CTCallCenter没用,无法监听电话的解决方案的更多相关文章
-
关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.c ...
-
Android 开发中的View事件监听机制
在开发过程中,我们常常根据实际的需要绘制自己的应用组件,那么定制自己的监听事件,及相应的处理方法是必要的.我们都知道Android中,事件的监听是基于回调机制的,比如常用的OnClick事件,你了解它 ...
-
iOS监听电话来电、挂断、拨号等
以下,来讲解在app内如何调用打电话功能和监听电话来电.挂断.拨号等功能. 简单的UI布局: 首先,先实现拨打电话的功能,以便于后续测试: // 拨打电话 - (IBAction)dialingBut ...
-
洛谷 P2025 脑力大人之监听电话
P2025 脑力大人之监听电话 题目背景 画外音: (声明:不要管前面那个,纯属意外,现已经重新编题,绝对原创) 上次海选,我们选出了参赛者中的20%参加本次比赛,现在我们将进行第二轮的筛选,这次的比 ...
-
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...
-
vue中给window添加滚动监听无效的解决方案
原文链接: 点我 页面中有这么一个需求,当页面滚动到一定高度之后,页面中的某些元素进行吸顶,固定到顶部位置,或者是滚动到一定程度进行更新数据的操作.我相信不少网友查阅过类似的资料,网友给出的解决方案, ...
-
Android应用中返回键的监听及处理
MainActivity: package com.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent ...
-
Android应用中Back键的监听及处理
MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...
-
android脚步---UI界面修改,关于activity中增加按钮和监听
增加按钮和监听,这个和上个不同在于,它不是在一个dialog里面,而是从新写了一个activity,因此需要先找到这个activity的入口. case R.id.checkframe: if (mC ...
随机推荐
-
形形色色的下拉菜单 (css3)
http://www.iteye.com/news/25339
-
sql server create foreign key
in table design view(right click table and choose design), right click on a column, and select 'rela ...
-
ionic:Build mobile apps faster with the web technologies you know and love
http://ionicframework.com/getting-started/ 5 Ionic Framework App Development Tips and Tricks http:// ...
-
【转】eclipse技巧2
谈谈eclipse使用技巧二 上节说道了怎么使用eclipse使您事半功倍.这节告诉您怎么用eclipse练成火眼金睛. ①借你一双火眼金睛让类的层次结构一目了然让你阅读代码如虎添翼 一个好的类的层次 ...
-
嵌入式 H264参数语法文档: SPS、PPS、IDR以及NALU编码规律
// [h264编码出的NALU规律]// 第一帧 SPS[0 0 0 1 0x67] PPS[0 0 0 1 0x68] SEI[0 0 0 1 0x6] IDR[0 0 0 1 0x65]// p ...
-
js小写转实现资本,js数字革命万元
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <hea ...
-
sql时间转换函数--备忘
总是忘记 一.语法: CAST (expression AS data_type) 参数说明: expression:任何有效的SQServer表达式. AS:用于分隔两个参数,在AS之前的是要处理的 ...
-
研华ADAM 6000系列型号枚举值
public enum Adam6000Type { Non = 0, Adam6015 = 6015, Adam6017 = 6017, ...
-
ZOJ Problem Set - 3708 Density of Power Network
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3708 #include <stdio.h> #include ...
-
mysql 查询优化 ~ select count 知多少
一 简介:今天咱们来聊聊mysql的查询总数 二 具体介绍 1 从引擎层面说 myisam myisam的扫描总行数是非常快的,这是因为myisam会将表的总行数存储起来,定期维护,但是注意,一旦加 ...