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(代理,委托)的学习
首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事.也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法. 其次,我简单的总结了 ...
随机推荐
- 洛谷P3110 [USACO14DEC]驮运Piggy Back
P3110 [USACO14DEC]驮运Piggy Back 题目描述 贝西和她的妹妹艾尔斯白天在不同的地方吃草,而在晚上他们都想回到谷仓休息.聪明的牛仔,他们想出了一个计划,以尽量减少他们在步行时花 ...
- Manacher(hdu3068最长回文)
浅谈manacher算法 manacher算法是我在网上无意中找到的,主要是用来求某个字符串的最长回文子串. 不过网上的版本还不太成熟,我就修改了下. 不要被manacher这个名字吓倒了,其实man ...
- express使用session会话
前几周在学习nodejs基础,发现nodejs没有session会话变量,导致登录注册实现多了很多步骤.现在记录一下express中会话变量用法 安装express-session方法: 1.cnpm ...
- java.sql.SQLException: Could not commit with auto-commit set on
This kind of exceptions occur when the Oracle JDBC Driver (ojdbc6.jar) version 12 or above will be u ...
- 小知识点:linux下的mv命令怎么用?
linux下的mv命令怎么用? mv a.txt b.txt 将a.txt 改名为b.txtmv a.txt /mnt/b.txt 同时更改路径为/mnt/mv a.txt /opt/ftp/ ...
- $(function(){})返回值$(document)
$(function(){})返回值为$(document). 做出下面的操作:可以使得页面背景改变. $(function (){}).find('body').css('background',' ...
- Table行合并操作
此方法不可取,但几天心血 保留,已有新想法,稍后会出一个完善的Table行列合并方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- js解析url参数
1.采用正则,这也是现在使用最为方便的 function getQueryString(name) { const reg = new RegExp("(^|&)" + n ...
- windows 安装 jdk1.8并配置环境变量
1.查看电脑环境 我的电脑--右键--属性 2.下载jdk1.8 网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...
- mui的picker组件填坑
在公司项目用到mui,vue进行开发 import mui from './assets/js/mui.min.js'后 加window.mui = mui再 import './assets/js/ ...