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的稍微平坦一些:本系列教程,将以" ...
随机推荐
- php bypass disable function
前言 最近开学,事太多了,好久没更新了,然后稍微闲一点一直在弄这个php bypass disable function,一开始自己的电脑win10安装蚁剑的插件,一直报错.怀疑是必须linux环境. ...
- Group Convolution组卷积
思路按照常规卷积到组卷积来. 常规卷积: 如果输入feature map尺寸为C∗H∗W C*H*WC∗H∗W,卷积核有N NN个,输出feature map与卷积核的数量相同也是N NN,每个卷积核 ...
- 数据类型-字符串(str)
1.只要是被单引号,双引号,三引号括起来的,都是字符串类型 2.字符串里面元素:单个字母,单个符号,都称之为一个元素 例如:s='hello!' (6个元素) len(数据)统计数据的长度pri ...
- c++11 新特性实战 (一):多线程操作
c++11多线程操作 线程 thread int main() { thread t1(Test1); t1.join(); thread t2(Test2); t2.join(); thread t ...
- 基础篇:详解JAVA对象实例化过程
目录 1 对象的实例化过程 2 类的加载过程 3 触发类加载的条件 4 对象的实例化过程 5 类加载器和双亲委派规则,如何打破双亲委派规则 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 对象的 ...
- 靠这些秋招秘笈,齐姐的学妹今年已经拿到了 8 个offer!
小齐说: 现在秋招进行时,正在找工作的小伙伴进度都怎么样了呀? 今天这篇文章是我武大的学妹今年秋招的经验分享,庆妹去年才决定转行,现在已手握 N+ 个 offer - 这篇文章干货满满,庆妹对每一块面 ...
- requests和正则表达式爬取猫眼电影Top100练习
1 import requests 2 import re 3 from multiprocessing import Pool 4 from requests.exceptions import R ...
- 电机AB相编码器测速
控制任务 检测编码器的脉冲并测速 电路设计 图1 直流电机带减速器和编码器 图2 编码器接线定义 编码器接线定义如下 M1:电机电源接口,绿色的 GND:编码器电源负极输入口,橙色的 C1:编码器A ...
- 【题解】 [GZOI2017]小z玩游戏
题目戳我 \(\text{Solution:}\) 考虑建图.操作可以看作对\(1\)进行的操作,于是有以下运行过程: \(1\to w[i]\to e[i]\to...\) 考虑倍数,一个数可以走到 ...
- 【题解】[USACO12MAR]Cows in a Skyscraper G
题目链接 题目大意:给定一个集合\(S\),给一个限制条件\(P\),要求划分集合,使得每一个子集\(A\in S\),\(A\)满足限制条件\(P\),且划分总数最小. 注意到数据范围\(n< ...