iOS-通信录
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-通信录的更多相关文章
- iOS:通信录(完成)(18-01-18更)
1.读取通信录 1).9.0以前:AddressBook 2).9.0以后:Contacts 2.调用通信录UI(不弄) 1).9.0以前:AddressBookUI 2).9.0以后:Contact ...
- 非智能手机通信录备份并还原至Android智能手机方法
随着智能手机早已深入普通用户的生活,2-3线城市的用户也逐渐从使用非智能机换成使用智能机.最近便遇见了这样一个转移通讯录的需求.之前使用的手机型号是BBK K201,通信录中绝大部分保存在了手机中,最 ...
- (五)backbone - DEMO - 通信录改造之使用requirejs
DEMO介绍是 DEMO通信录的扩展,使用requirejs模块化整合 大体实现 • model文件 model/contact.js define(function (){ // user cont ...
- 管理Android通信录
Android提供了Contacts应用程序来管理联系人,并且Android系统还为联系人管理提供了ContentProvider,这就同意其他应用程序以ContentResolver来管理联系人数据 ...
- 通信录列表+复杂Adapter分析
概述 最近写论文之余玩起了github,发现有个citypicker挺不错的,高仿了美团城市选择和定位的一些功能 地址链接 效果图如下: 自己手动写了一遍优化了一些内容,学到了一些姿势,下面对其中一些 ...
- ios手机录屏软件哪个好
苹果手机中的airplay镜像,是苹果手机系统的一大特色,可以轻松把手机屏幕投射电脑,这个功能使苹果手机相较安卓手机投屏会更加轻松,那么如何实现苹果手机投射电脑屏幕?下面小编便来分享ios手机录屏软件 ...
- Android 和 iOS 实现录屏推流的方案整理
一.录屏推流实现的步骤 1. 采集数据 主要是采集屏幕获得视频数据,采集麦克风获得音频数据,如果可以实现的话,我们还可以采集一些应用内置的音频数据. 2. 数据格式转换 主要是将获取到的视频和音频转换 ...
- 今天研究了一下手机通信录管理系统(C语言)
题目:手机通信录管理系统 一.题目要求 二.需求分析 三.设计步骤/编写代码 四.上机/运行结果 五.总结 一.题目要求 模拟手机通信录管理系统,实现对手机中的通信录进行管理操作.功能要求: (1)查 ...
- iOS的录屏功能
iOS的录屏功能其实没什么好说的,因为网上的教程很多,但是网上的Demo无一例外几乎都有一个bug,那就是iPad上会出现闪退,这也体现了国内的教程文档的一个特点,就是抄袭,教程几乎千篇一律,bug也 ...
- 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人
Android系统中联系人的通讯录的contentProvide是一个单独的apk,显示在界面的contact也是一个独立的apk,联系人apk通过contentProvide访问底层的数据库. 现在 ...
随机推荐
- linux - 权限解析
当你在linux下用命令ll 或者ls -la的时候会看到这些字眼,这些字眼表示为不同用户组的权限:r:read就是读权限 --数字4表示w:write就是写权限 --数字2表示 x:excute就是 ...
- javaweb基础(11)_cookie的会话管理
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- USACO08FEB Hotel
题目传送门 线段树维护区间 线段树结构体 struct zzz{ int l,r,mi; //l为以左端点的为起点的最长子串 //r为以右端点为终点的最长子串 //mi是区间内部的最长子串 }tree ...
- inner join 和 left join 的区别
1.left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表 ...
- Windows上PostgreSQL安装配置教程
Windows上PostgreSQL安装配置教程 这篇文章主要为大家详细介绍了Windows上PostgreSQL安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PostgreSQL的 ...
- 01_10_Struts2_2.1.6版本的中文问题
01_10_Struts2_2.1.6版本的中文问题 1. 由于Struts2_2.1.6存在bug 正常情况下在struts.xml配置如下一行 <constant name="st ...
- JDBC-防止SQL注入问题
String sql = "select * from user where name = '" + name + "' and password = '" ...
- 01创建线程CreateThread和_beginthreadex
Windows多线程之线程创建 一. 线程创建函数 CreateThread 1. 函数原型 HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRI ...
- ESP8266入门学习笔记1:资料获取
乐鑫官网:https://www.espressif.com/zh-hans/products/hardware/esp8266ex/overview 乐鑫资料:https://www.espress ...
- Java-basic-6-方法
命令行参数的使用 public class test { public static void main(String args[]) { for(int i = 0; i < args.len ...