CTCall简介(后续会继续补充)
使用CTCall需要导入CoreTelephony.framework框架。
CTCall的基本使用
(1)初始化call
CFStringRef number = CFSTR("15555555555");
CTCallRef call = CTCallDial(number);// 创建并拨号
...
CTCallHold(call);// 保持通话
...
CTCallResume(call);// 恢复通话
...
CTCallDisconnect(call);// 结束通话
注意:传给CTCallDial方法的参数,必须是规范化的电话号码。如:+1 (555) 555-5555 规范化后为 15555555555。
那么如何获取规范化的号码呢:你可以使用 CPPhoneNumberCopyNormalized方法来规范化一个电话号码。
(2)获取通话记录使用 _CTCallCopyAllCalls 方法获取所有的通话记录,这个列表中的每个元素都是CTCall。CFArrayRef calls = _CTCallCopyAllCalls();NSLog(@"Calls: %@", calls);
CFRelease(calls);
(3)补充CPPhoneNumber
上文提到过,在创建CTCall的时候,传进去的参数必须是规范化的电话号码。那么用于处理电话号码的东东就是CPPhoneNumber啦。现在来介绍下CPPhoneNumber的功能和使用。
CPPhoneNumber的功能使用最多的就是规范化电话号码和比较两个电话号码。
<1>规范化电话号码:CPPhoneNumberCopyNormalized 该方法返回一个规范化的号码copy
extern "C" char *CPPhoneNumberCopyNormalized(const char* number);
char *pn = CPPhoneNumberCopyNormalized("+1 (555) 555-5555");
printf("%s\n", pn); // 15555555555
free(pn);
<2>比较两个号码:CPPhoneNumbersEqual 该方法会把传进来的两个号码自动格式化后,再进行比较,相同为真,不同为假。国家代码这个参数,在两个电话号码里面有不包含国家代码的时候,需要额外提供一个。
extern "C" CFStringRef CPPhoneNumberCopyHomeCountryCode();
extern "C" BOOL CPPhoneNumbersEqual(const char* number1, const char* number2, CFStringRef country);
BOOL equal = CPPhoneNumbersEqual("+49302270", "0302270", CPPhoneNumberCopyHomeCountryCode()); // 如果连个号码都是+49(德国)的,那么这两个号码相同,返回yes。
CTCall简介(后续会继续补充)的更多相关文章
- Flask的使用以及返回值(其中Response后续详细单独补充)
一.使用 安装依赖pip3 install flask 第一步 创建Flask对象 from flask import Flask app =Flask(__name__) 第二步 创建路由 @app ...
- Spring MVC简介
Spring MVC简介 Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC ...
- swift基础:第三部分:对第一部分的补充说明
今天是我学习swift的第二天,虽然我和swift的距离有点远,但我相信,我会慢慢的接近这门语言的.好了,我们聊聊昨天晚上的事吧,昨天晚上下班早,回到家时,真是惊喜哈,宿舍那两做好了饭,等我吃饭,想对 ...
- IOS Quartz2D简介
Quartz2D 简介( 后续会有相关应用) 第一部分 绘制直线 代码示例: - (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef cxConte ...
- JVM(1)——简介
网上流传着一段挺有意思的话-- 对于从事C或C++的开发人员来说,他们既是内存管理的最高权力的皇帝,也是最基础的劳动人民,担负着每一个对象生命开始到终结的维护工作,有点光杆司令的赶脚. 但对于java ...
- Analysis of Autherntication Protocol with Scyther :Case Study ---补充整理
1.Needham-Schroeder public Key Protocol (基于非对称的加密协议) the Protocol's authors are Roger NeedHam and Mi ...
- JVM学习(3)——总结Java内存模型
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 为什么学习Java的内存模式 缓存一致性问题 什么是内存模型 JMM(Java Memory Model)简 ...
- HTML5-02 元素
概述 HTML 文档主要由元素组成,且主要分为两大部分:头部 和 主体.如图: 头部 概述 <head> 元素包含了所有的头部标签.<head> 元素中通常包含脚本(scrip ...
- Redux教程1:环境搭建,初写Redux
如果将React比喻成士兵的话,你的程序还需要一位将军,去管理士兵(的状态),而Redux恰好是一位好将军,简单高效: 相比起React的学习曲线,Redux的稍微平坦一些:本系列教程,将以" ...
随机推荐
- Vue iview可编辑表格的实现
创建table实例页 views/table.vue <template> <h1>table page</h1> </template> <sc ...
- 使用Golang的singleflight防止缓存击穿
背景 在使用缓存时,容易发生缓存击穿. 缓存击穿:一个存在的key,在缓存过期的瞬间,同时有大量的请求过来,造成所有请求都去读dB,这些请求都会击穿到DB,造成瞬时DB请求量大.压力骤增. singl ...
- 新手接触springboot
新手使用springboot或者说,刚接触java行业,有些不明白的就是项目的架构是怎么样的,我今天在这儿稍微整理了一下 有些新手可能在想,springboot是怎么解决最原始的增-删-改-查, 快速 ...
- 栈的Java实现-分别使用数组和链表
栈是非常重要的数据结构,栈具有后进先出的特点. 在JVM内部,每个线程维护一个栈,对于每个方法调用,入栈一个元素,成为栈帧,当方法执行完成后,对应的栈帧出栈. 栈帧中,也包含一个栈,称为操作数栈. 一 ...
- svn提交代码出错
今天提交代码的时候一直报错,下面是错误信息 Error: Commit failed (details follow): Error: Commit blocked by pre-commit ho ...
- 使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat 问题解决
这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文件错误,eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法把brea ...
- spark源码分析, 任务反序列化及执行
1 ==> 接受消息,org.apache.spark.executor.CoarseGrainedExecutorBackend#receive case LaunchTask(data) = ...
- 基于Scrapy的交互式漫画爬虫
Github项目地址 前言 该项目始于个人兴趣,本意为给无代码经验的朋友做到能开箱即用 阅读此文需要少量Scrapy,PyQt 知识,全文仅分享交流 摘要思路,如需可阅读源码,欢迎提 issue 一. ...
- 【CF1425A】 Arena of Greed题解
原题链接 简要翻译: Mr.Chanek与另一个人玩一个取硬币游戏,他先手.玩家在自己的回合内可以取走硬币堆中的一个.如果硬币堆里有偶数个硬币,玩家也可以选择取走硬币总数的一半.两名玩家都是绝对聪明的 ...
- Vue.js 学习笔记之三:与服务器的数据交互
显而易见的,之前的02_toDoList存在着一个很致命的缺陷.那就是它的数据只存在于浏览器端,一但用户关闭或重新载入页面,他之前加入到程序中的数据就会全部丢失,一切又恢复到程序的初始状态.要想解决这 ...