iOS监听电话来电、挂断、拨号等
以下,来讲解在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监听电话来电、挂断、拨号等的更多相关文章
- iOS监听电话事件
项目上有个需求,要求打完电话后加积分. 首先导入这两个头文件: #import <CoreTelephony/CTCallCenter.h> #import <CoreTelepho ...
- android 呼入电话的监听(来电监听)转
需要权限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 方式一:通过广 ...
- iOS ARC中CTCallCenter没用,无法监听电话的解决方案
今天在尝试使用CTCallCenter进行电话监听时,发现一直无法捕获电话状态改变的事件,研究了一番之后找到了解决方案,在这里分享给大家. 首先使用CTCallCenter监听电话的代码如下: CTC ...
- 洛谷 P2025 脑力大人之监听电话
P2025 脑力大人之监听电话 题目背景 画外音: (声明:不要管前面那个,纯属意外,现已经重新编题,绝对原创) 上次海选,我们选出了参赛者中的20%参加本次比赛,现在我们将进行第二轮的筛选,这次的比 ...
- ios电话拨打进行监听电话状态
#import "ViewController.h" #import <CoreTelephony/CTCallCenter.h> #import <CoreTe ...
- iOS 监听 出发 Home键 NSNotificationCenter UIApplicationWillResignActiveNotification
第一步: 创建2个NSNotificationCenter监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@sel ...
- iOS监听模式系列之通知中心
补充--通知中心 对于很多初学者往往会把iOS中的本地通知.推送通知和iOS通知中心的概念弄混.其实二者之间并没有任何关系,事实上它们都不属于一个框架,前者属于UIKit框架,后者属于Foundati ...
- iOS监听模式系列之键值编码KVC、键值监听KVO的简单介绍和应用
键值编码KVC 我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的 ...
- iOS监听模式系列之关于delegate(代理,委托)的学习
首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事.也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法. 其次,我简单的总结了 ...
随机推荐
- uoj#402. 【CTSC2018】混合果汁(主席树+二分)
传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...
- BOM核心API
前言 我觉得前端中最难的不是业务逻辑,而是API太多,知道的太少. BOM是什么? BOM是Browser Object Model的缩写,即浏览器对象模型.浏览器对象模型提供了可以与浏览器窗口进行互 ...
- EF升级 反射重载方法ApplyConfiguration
protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); //var ...
- JDK 简介
JDK简介 JDK java开发工具包 JRE java 运行时环境 JVM java虚拟机 三者的关系:JDK 包含 JRE,JRE 包含 JVM Java的核心优势是跨平台,由JVM虚拟机实现的. ...
- php根据出生日期获取年龄
/** * @param $birthday 出生年月日(1992-1-3) * @return string 年龄 */ function countage($birthday){ $year=da ...
- ES6新特性使用小结(二)
六.Array 扩展 /* * Array Api Array.of 数组的构建 * */ { let arr = Array.of(, , , , , ); console.log(arr); // ...
- GYM 101933I(贪心、大整数)
我读题有问题呀,题目中到底哪里保证数据一定至少是2倍关系了Orz--然后既然题意就是保证了那贪心一下即可,因为如果当前这个大的不选,那剩下一堆逐渐小于上一代的1/2的,凑起来都不如这个大的,更别说答案 ...
- D. Mike and distribution 首先学习了一个玄学的东西
http://codeforces.com/contest/798/problem/D D. Mike and distribution time limit per test 2 seconds m ...
- CM5.7.2 yum离线安装笔记
一.建立yum本地服务源(yum支持http和ftp两种协议,这里使用http协议) 1.启动httpd服务 启动命令:service httpd start 关闭命令:service ht ...
- h5点击区域和实际区域对不上
点击区域和实际区域对不上 然后点击后触发的其实是上面的区域,会导致事件触发错误