以下,来讲解在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. 「BZOJ2127」happiness(最小割)

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

  2. ajax异步传输数据,return返回值为空

    今天在项目中遇到了一个问题,就是在定义了一个函数drawHtml(),本意是想在函数运行结束后,返回拼接的字符串,可是函数运行结束后始终返回的是undefined 有BIG的代码: function ...

  3. 使用htmlparser爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  4. Java进程占用内存过高,排查解决方法

    最近收到邮件报警,说内存使作率达到84%.如下图: 解决方法: A:可能是代码原因导致的问题: 1.使用命令:top 查看当前进程的状态 2.从上图可以看到PID:916的java进程占用内存较大.定 ...

  5. 使用JS判断客户端、浏览器、操作系统类型

    一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. 核心代码如下: 方法一: &l ...

  6. [题解](折半搜索)luogu_P4799_BZOJ_4800世界冰球锦标赛

    抄的题解 以及参考:https://www.cnblogs.com/ZAGER/p/9827160.html 2^40爆搜过不了,考虑折半搜索,难点在于合并左右的答案,因为有可能答案同时载左右两边,我 ...

  7. 13.组合查询--SQL

    利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...

  8. NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式

    NET Core实现OAuth2.0的ResourceOwnerPassword和ClientCredentials模式 前言 开发授权服务框架一般使用OAuth2.0授权框架,而开发Webapi的授 ...

  9. ASP.Net 页面和后台执行的先后顺序

    后台的Page_Load事件——>前台页面加载

  10. SQL判断一个事件段 是否在数据库中与其他时间段有重叠 判断时间重叠

    数据库字段startDate 开始时间   endDate 结束时间  -两个参数 比如查2-2  至2-6 在数据库中是否与其他时间有重叠 四个条件有一项满足则有重叠时间 思路是这样子 以开始和结束 ...