1.概述:

* 对于每一个移动设备而言,都有一个内置的数据库-----通讯录。

* 在IOS上,通讯录放在SQLite3数据库中。

* 由于不同应用之间不能直接访问,我们想要实现对数据库的访问,必须使用苹果开放的API.

* 苹果公司对数据访问开放的API是AddressBook(低级API)和AddressBookUI(高级API).

* 为了安全考虑,访问通讯录需要经过用户授权,仅需一次授权即可。

2.AddressBook 和 AddressBookUI的区别:

* AddressBook属于低级API,可以获取通讯录中的数据,但是需要自构UI界面

* AddressBookUI属于高级API,为我们提供了UI界面,使用起来比较方便。

3.AddressBook详述

* 在AddressBook中,比较常用的类是ABAddressBook, ABPerson, ABGroup, ABRecord

* ABAddressBook :封装了通讯录的接口。(对应ABAddressBookRef)

* ABPerson           :封装通信录个人的信息数据。(对应ABPersonRef)

* ABGroup             :封装了通讯录组信息数据。(对应ABGroupRef)

* ABRecord            :封装了数据库的一条记录。(对应ABRecordRef)

 想要获取通信录的信息,第一步是要导入AddressBook的框架,并在头文件中写入头文件<AddressBook/AddressBook.h>

 用户想要访问通讯录,第一步要创建通讯录对象,用于用户请求访问通讯录,代码如下:

 ABAddressBookRef addressbook = ABAddressBookCreateWithOptions(NULL, NULL);

 * 如果是第一次访问通信录,需要获取用户的授权,不是第一次,直接访问。系统给我们提供的函数是:

 *  ABAddressBookRequestAccessWithCompletion(<#ABAddressBookRef addressBook#>, <#^(bool granted, CFErrorRef error)completion#>)

 * 如果第一次访问,点击允许访问,granted的值为一。

 * 只要granted的值为真的情况下,才允许访问通讯录。

 * 获取通讯录的所有记录的代码如下:

 NSArray *array = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressbook);

 * 接下来我们要获取通讯录的联系人的姓名:代码如下:

 ABRecordRef record = array[i];
NSString *name = (NSString *)ABRecordCopyCompositeName(record);

* 获取联系人的手机号的时候,是属于一个多值属性,跟后去联系人姓名的时候有点不同,联系人姓名属于单值属性,代码如下:

 ABMultiValueRef ref = ABRecordCopyValue(record, kABPersonPhoneProperty);
NSString *phone = ABMultiValueCopyValueAtIndex(ref, );

 * 整体代码为:(第二个函数的功能是去掉电话号码中的特殊字符,因为我们获取到得号码是苹果给我们分隔好的)

-(void)getAddressbookContent
{
ABAddressBookRef addressbook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressbook, ^(bool granted, CFErrorRef error) {
if (granted == YES)
{
NSArray *array = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressbook);
for (int i = 0; i < array.count; i ++)
{
ABRecordRef record = array[i];
NSString *name = (NSString *)ABRecordCopyCompositeName(record);
ABMultiValueRef ref = ABRecordCopyValue(record, kABPersonPhoneProperty);
NSString *phone = ABMultiValueCopyValueAtIndex(ref, 0);
NSString *phone1 = phone;
phone1 = [self deleteSpecialString:phone1];
contact *c = [[contact alloc]initWithName:name withPhone:phone1];
[_arrayContact addObject:c];
[c release];
CFRelease(name);
CFRelease(phone);
CFRelease(ref);
}
}
});
}
-(NSString *)deleteSpecialString:(NSString *)string
{
string = [string stringByReplacingOccurrencesOfString:@"(" withString:@""];
string = [string stringByReplacingOccurrencesOfString:@")" withString:@""];
string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];
string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
return string;
}

4.ABAddressBookUI简述

* 使用这个类我们可以直接调出通讯录的界面,代码如下:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
[self presentViewController:picker animated:YES completion:nil];

效果图如下:

这个类有几个比较常用的代理方法,分别是:

点击取消按钮,相应该方法

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker

点击联系人信息,是否跳转到详情界面

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

在联系人详情界面中点击了其它信息,是否跳转到其它界面(例如,点击时间,可以打开日历)

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

5.上面的介绍,只是通讯录的基本使用,当然通讯录的方法不止这些,例如可以修改,添加,删除联系人的信息,在此主要介绍了如何获取通讯录的信息。

iOS-通信录的更多相关文章

  1. iOS:通信录(完成)(18-01-18更)

    1.读取通信录 1).9.0以前:AddressBook 2).9.0以后:Contacts 2.调用通信录UI(不弄) 1).9.0以前:AddressBookUI 2).9.0以后:Contact ...

  2. 非智能手机通信录备份并还原至Android智能手机方法

    随着智能手机早已深入普通用户的生活,2-3线城市的用户也逐渐从使用非智能机换成使用智能机.最近便遇见了这样一个转移通讯录的需求.之前使用的手机型号是BBK K201,通信录中绝大部分保存在了手机中,最 ...

  3. (五)backbone - DEMO - 通信录改造之使用requirejs

    DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...

  4. 管理Android通信录

    Android提供了Contacts应用程序来管理联系人,并且Android系统还为联系人管理提供了ContentProvider,这就同意其他应用程序以ContentResolver来管理联系人数据 ...

  5. 通信录列表+复杂Adapter分析

    概述 最近写论文之余玩起了github,发现有个citypicker挺不错的,高仿了美团城市选择和定位的一些功能 地址链接 效果图如下: 自己手动写了一遍优化了一些内容,学到了一些姿势,下面对其中一些 ...

  6. ios手机录屏软件哪个好

    苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...

  7. Android 和 iOS 实现录屏推流的方案整理

    一.录屏推流实现的步骤 1. 采集数据 主要是采集屏幕获得视频数据,采集麦克风获得音频数据,如果可以实现的话,我们还可以采集一些应用内置的音频数据. 2. 数据格式转换 主要是将获取到的视频和音频转换 ...

  8. 今天研究了一下手机通信录管理系统(C语言)

    题目:手机通信录管理系统 一.题目要求 二.需求分析 三.设计步骤/编写代码 四.上机/运行结果 五.总结 一.题目要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理操作.功能要求: (1)查 ...

  9. iOS的录屏功能

    iOS的录屏功能其实没什么好说的,因为网上的教程很多,但是网上的Demo无一例外几乎都有一个bug,那就是iPad上会出现闪退,这也体现了国内的教程文档的一个特点,就是抄袭,教程几乎千篇一律,bug也 ...

  10. 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人

    Android系统中联系人的通讯录的contentProvide是一个单独的apk,显示在界面的contact也是一个独立的apk,联系人apk通过contentProvide访问底层的数据库. 现在 ...

随机推荐

  1. vue 修改端口

  2. 在DataGridView控件中隔行换色

    实现效果: 知识运用: DataGridViewRow类的公共属性DefaultCellStyle的BackColor属性 public Color BackColor {get; set;} 实现代 ...

  3. DROP OPERATOR CLASS - 删除一个操作符类

    SYNOPSIS DROP OPERATOR CLASS name USING index_method [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP OPER ...

  4. docker安装gitlab-ce

    pull and run docker pull docker.io/gitlab/gitlab-ce docker run -itd --name gitlab -p 10080:80 gitlab ...

  5. 《毛毛虫团队》第九次团队作业:BETA冲刺与团队项目验收

    一:实验名称:Beta冲刺与验收准备 二:实验目的与要求 (1)掌握软件黑盒测试技术: (2)学会编制软件项目总结PPT.项目验收报告: (3)掌握软件项目验收内容,验收流程. 三.实验内容与步骤 任 ...

  6. Linux centos 6 配置php环境,扩展redis

    1.首先安装一个虚拟机(我自己版本:VM 10.0.4) yum -y install openssl psmisc openssl-devel php-devel pcre-devel gcc gc ...

  7. fei33423 工作 职场 格言

    对老板: 1.  老板不知道你做的事情(目标设定) 2.  老板要的是规划(对上报告), 自己给自己设定 金字塔四位下的目标,各种维度.如何细化. 2.1 明确老板期望 2.2 与老板达成共识 2.3 ...

  8. mysql grant 用户权限说明

    mysql grant 用户权限说明 Mysql 有多个个权限?经常记不住,今天总结一下,看后都能牢牢的记在心里啦!! 很明显总共28个权限:下面是具体的权限介绍:转载的,记录一下: 一.权限表 my ...

  9. textContent和innerText属性的区别

    原文摘自 textContent和innerText属性的区别 <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  10. Pig Latin-freecodecamp算法题目

    Pig Latin 1.要求 Pig Latin把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay". 如果单词以元音开始,你只 ...