以下,来讲解在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. 洛谷P3110 [USACO14DEC]驮运Piggy Back

    P3110 [USACO14DEC]驮运Piggy Back 题目描述 贝西和她的妹妹艾尔斯白天在不同的地方吃草,而在晚上他们都想回到谷仓休息.聪明的牛仔,他们想出了一个计划,以尽量减少他们在步行时花 ...

  2. Manacher(hdu3068最长回文)

    浅谈manacher算法 manacher算法是我在网上无意中找到的,主要是用来求某个字符串的最长回文子串. 不过网上的版本还不太成熟,我就修改了下. 不要被manacher这个名字吓倒了,其实man ...

  3. express使用session会话

    前几周在学习nodejs基础,发现nodejs没有session会话变量,导致登录注册实现多了很多步骤.现在记录一下express中会话变量用法 安装express-session方法: 1.cnpm ...

  4. 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 ...

  5. 小知识点:linux下的mv命令怎么用?

    linux下的mv命令怎么用? mv a.txt b.txt  将a.txt 改名为b.txtmv a.txt /mnt/b.txt    同时更改路径为/mnt/mv a.txt /opt/ftp/ ...

  6. $(function(){})返回值$(document)

    $(function(){})返回值为$(document). 做出下面的操作:可以使得页面背景改变. $(function (){}).find('body').css('background',' ...

  7. Table行合并操作

    此方法不可取,但几天心血 保留,已有新想法,稍后会出一个完善的Table行列合并方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  8. js解析url参数

    1.采用正则,这也是现在使用最为方便的 function getQueryString(name) { const reg = new RegExp("(^|&)" + n ...

  9. windows 安装 jdk1.8并配置环境变量

    1.查看电脑环境 我的电脑--右键--属性 2.下载jdk1.8 网址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-do ...

  10. mui的picker组件填坑

    在公司项目用到mui,vue进行开发 import mui from './assets/js/mui.min.js'后 加window.mui = mui再 import './assets/js/ ...