博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检测来电
阅读量:7033 次
发布时间:2019-06-28

本文共 1302 字,大约阅读时间需要 4 分钟。

hot3.png

问题

最近在做一个有录音功能的App,要求当用户接到来电时,要停止录音。该如何实现这个功能呢?

解决方案

我首先想到了AppDelegate里的applicationWillResignActive:方法,在该方法的注释中就写到到收到来电或短信时,系统会自动调用该方法,如下:

// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 

// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

但是有个问题,当程序进入后台时,也会调用这个方法,而我的App要求,即使进入后台,也可以继续录音,而在applicationWillResignActive:方法里无法判断是什么原因引起的该方法的调用(可能有方法,但我没搜到,哪位朋友知道的话分享一下),因此这个解决方案行不通。

继续查找资料,最终找到CoreTelephony框架,这个框架包含了电话相关的API,可以实现监测来电,查看运营商信息等功能。下面就是具体的实现监测来电的代码

#import "ViewController.h"//引入框架@import CoreTelephony;@interface ViewController ()@property (nonatomic, strong) CTCallCenter * center;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    self.center = [[CTCallCenter alloc] init];    self.center.callEventHandler = ^(CTCall * call)    {        //TODO:检测到来电后的处理    };}@end
  •  
  • 这里注意一定要把center写成一个单独的属性,并且是强引用(strong),否则如果在viewDidLoad方法里创建center,viewDidLoad方法调用完后center就销毁了,就无法检测到来电了,千万不要犯这种低级错误。

转载于:https://my.oschina.net/u/2607703/blog/710002

你可能感兴趣的文章
sed命令实例
查看>>
20180102-正则表达式和grep
查看>>
Android开发之如何让父控件不拦截子空间的事件
查看>>
大型网站技术架构(六)网站的伸缩性架构
查看>>
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
查看>>
Java基础学习总结(13)——流IO
查看>>
Maven学习总结(三)——使用Maven构建项目
查看>>
Tomcat在Linux上的安装与配置
查看>>
CentOS 6和CentOS 7命令区别
查看>>
OUTLOOK2007 即时搜索失效解决经过
查看>>
SVN学习总结(2)——SVN冲突解决
查看>>
Maven学习总结(四)——Maven核心概念
查看>>
安装xtables-addons时报错
查看>>
.NET开发规范教程
查看>>
网络公开课《最后的升级-Oracle RAC数据库升级》
查看>>
配置FTP服务
查看>>
我的友情链接
查看>>
人类认识的层次模型
查看>>
WDS使用捕获映像制作企业自定义映像
查看>>
C++数组、指针与vector、iterator
查看>>