以下,来讲解在app内如何调用打电话功能和监听电话来电、挂断、拨号等功能。

简单的UI布局:

首先,先实现拨打电话的功能,以便于后续测试:

// 拨打电话
- (IBAction)dialingButtonClick:(UIButton *)sender {
NSURL *url = [NSURL URLWithString:@"tel:138xxxxxxxx"];// 填入有效电话号码
NSURLRequest *request = [NSURLRequest requestWithURL:url];
UIWebView * callWebview = [[UIWebView alloc] init];
[callWebview loadRequest:request];
[self.view addSubview:callWebview];
}

然后,监听电话,首先需要我们导入一个框架并引入头文件:

// 导入框架 CoreTelephony.framework
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

监测电话:

// 监测电话
- (void)monitorCall {
self.callCenter.callEventHandler = ^(CTCall* call) {
if (call.callState == CTCallStateDisconnected) {
NSLog(@"电话结束或挂断电话");
} else if (call.callState == CTCallStateConnected){
NSLog(@"电话接通");
} else if(call.callState == CTCallStateIncoming) {
NSLog(@"来电话");
} else if (call.callState ==CTCallStateDialing) {
NSLog(@"拨号打电话(在应用内调用打电话功能)");
}
};
} #pragma mark - getter Methods - (CTCallCenter *)callCenter {
if (!_callCenter) {
_callCenter = [[CTCallCenter alloc] init];
}
return _callCenter;
}

// 注:值得说明的是,CTCallCenter 呼叫中心必须强引用,防止对象被释放掉而无法监测电话。

场景:

1、点击按钮,拨号时:

-- ::14.334 Demo_监听电话状态[:] applicationWillResignActive
-- ::15.520 Demo_监听电话状态[:] applicationDidBecomeActive
-- ::15.621 Demo_监听电话状态[:] 拨号打电话(在应用内调用打电话功能)

2、手机来电,然后挂断:

-- ::11.479 Demo_监听电话状态[:] 来电话
-- ::11.819 Demo_监听电话状态[:] applicationWillResignActive
-- ::13.746 Demo_监听电话状态[:] 电话结束或挂断电话
-- ::15.267 Demo_监听电话状态[:] applicationDidBecomeActive

3.手机来电,接通,然后挂断:

-- ::11.479 Demo_监听电话状态[:] 来电话
-- ::11.819 Demo_监听电话状态[:] applicationWillResignActive
-- ::11.919 Demo_监听电话状态[:] 电话接通
-- ::13.746 Demo_监听电话状态[:] 电话结束或挂断电话
-- ::15.267 Demo_监听电话状态[:] applicationDidBecomeActive

尊重作者劳动成果,转载请注明: 【kingdev】

iOS监听电话来电、挂断、拨号等的更多相关文章

  1. iOS监听电话事件

    项目上有个需求,要求打完电话后加积分. 首先导入这两个头文件: #import <CoreTelephony/CTCallCenter.h> #import <CoreTelepho ...

  2. android 呼入电话的监听(来电监听)转

    需要权限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 方式一:通过广 ...

  3. iOS ARC中CTCallCenter没用,无法监听电话的解决方案

    今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家. 首先使用CTCallCenter监听电话的代码如下: CTC ...

  4. 洛谷 P2025 脑力大人之监听电话

    P2025 脑力大人之监听电话 题目背景 画外音: (声明:不要管前面那个,纯属意外,现已经重新编题,绝对原创) 上次海选,我们选出了参赛者中的20%参加本次比赛,现在我们将进行第二轮的筛选,这次的比 ...

  5. ios电话拨打进行监听电话状态

    #import "ViewController.h" #import <CoreTelephony/CTCallCenter.h> #import <CoreTe ...

  6. iOS 监听 出发 Home键 NSNotificationCenter UIApplicationWillResignActiveNotification

    第一步: 创建2个NSNotificationCenter监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@sel ...

  7. iOS监听模式系列之通知中心

    补充--通知中心 对于很多初学者往往会把iOS中的本地通知.推送通知和iOS通知中心的概念弄混.其实二者之间并没有任何关系,事实上它们都不属于一个框架,前者属于UIKit框架,后者属于Foundati ...

  8. iOS监听模式系列之键值编码KVC、键值监听KVO的简单介绍和应用

    键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的 ...

  9. iOS监听模式系列之关于delegate(代理,委托)的学习

    首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事.也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法. 其次,我简单的总结了 ...

随机推荐

  1. 洛谷P3190 [HNOI2007]神奇游乐园(插头dp)

    传送门 大概是算第一道自己做出来的插头dp? (虽然都是照着抄板子的) (虽然有个地方死活没调出来最后只能看题解才发现自己错在哪里的) 我就当你们都会插头dp了…… 因为必须得是一条路径,所以扫描线上 ...

  2. Google Analytics & Webtrend 使用笔记

    GA和webtrend中的参数,每每遇到了都记不住.遇到一点记一点好了... Page Views(PV): 浏览次数.用户每打开一个页面,记录为1个PV:用户多次打开同一个页面,PV累计多次. Da ...

  3. 如何使用Xshell连接VMware上的Linux虚拟机

    前序:最近开始研究Hadoop平台的搭建,故在本机上安装了VMware workstation pro,并创建了Linux虚拟机(centos系统),为了方便本机和虚拟机间的切换,准备使用Xshell ...

  4. 外网连接Mysql云数据库

    购买好Mysql云数据库,这里是腾讯云 在管理中把外网地址开通,然后可以看到本云数据库的外网地址 注意:外网地址com到前面才是连接地址,冒号后面的10057是连接的端口号,可以看下面的连接语句 cm ...

  5. Linux下FTP用户的使用配置

    1.创建本地账户,用户名为自己的姓名拼音,使用本地用户测试,从以下几个方面来观察,账户 .密码.访问目录(可否查看上级目录) .上传下载的权限.

  6. VLAN-7-VTP处理及修订版本号

    在VTPv1和VTPv2中,更新的过程开始于:交换机管理员在一台VTP服务器交换机上添加.删除或更新VLAN.当新的配置出现时,VTP服务器将旧的VTP修订版本号加1,并通告完整的VLAN配置数据库以 ...

  7. Django中间件的执行流程

    Django中间件的执行流程. 请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行, 如果返回的值是H ...

  8. 删除vi编辑产生的.swp文件(linux编辑文件没有退出时直接关闭程序产生的临时文件)

    关于swp文件 使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件以备不测(不测下面讨论),如果你正常退出,那么这个 ...

  9. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  10. awk单引号处理

    awk中使用单引号,常规字符串,'\''即可,但如果像下面在$4变量用单引号,则还需要加上双引号才行. cat 2.txt | awk '{ print $1, $2, $3, "'\''& ...