IOS 获取通讯录中信息
获取通讯录中信息
一. 我们设置一个ABAddressBookRef
类型的属性addressBook
。
二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限。
在运行下面的获取权限的方法的时候,系统会自动跳出来一个alterView,询问是否允许访问通讯录。(注意这个访问只会执行一次,之后即使我们删除了这个app,下次在下载回来,这个询问也不会再执行了)
CFErrorRef error;
addressBook = ABAddressBookCreateWithOptions(NULL , &error);//获得访问通讯录的权限
三. 获取通讯录中的信息:
在获取了访问通讯录权限之后,我们需要获取通讯录中的信息,这个信息以ABAddressBookRef的类型存储。
//访问通讯录信息
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted == YES) {
NSLog(@"已经获取了通讯录信息");
}else{
NSLog(@"获取通讯录信息失败,\nerror-------%@", error);
}
});
四. 将通讯录中的信息转化为我们方便使用的类型
CFBridgingRelease就是将Core Foundation类型的变量转化为NSObject类。转化之后,内存改为ARC自动管理。
CFBridgingRetain就是将NSObject类型的变量转化为Core Foundation类型。转化之后,新创建的数值,内存要手动管理。
//将获取的数据转化为出来
NSArray *addressArray = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
for(id object in addressArray){
ABRecordRef record = CFBridgingRetain(object);//单个的记录,就是一个联系人信息
//获取通讯录中的名字
NSString *firstName = CFBridgingRelease(ABRecordCopyValue(record, kABPersonFirstNameProperty));
NSLog(@"firstName --------------%@", firstName);
//获取通讯录中的email地址
CFArrayRef Emailarray = ABRecordCopyValue(record, kABPersonEmailProperty);
NSArray *emails = CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(Emailarray));
for (int i = 0; i < [emails count]; i++) {
NSLog(@"emailAddress--------------%@", [emails objectAtIndex:i]);
}
CFRelease(record);
}
五. 附上源码:
#import "ViewController.h"
#import <AddressBook/AddressBook.h>
@interface ViewController ()
{
ABAddressBookRef addressBook;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self loadAddressBook];
[self LoadBaseUI];
}
- (void)LoadBaseUI{
////TODO: 初始化界面
}
- (void)loadAddressBook{
CFErrorRef error;
addressBook = ABAddressBookCreateWithOptions(NULL , &error);//获得访问通讯录的权限
if (addressBook == nil) {
NSLog(@"通讯录权限获取失败\nerror----------%@", error);
}else{
//访问通讯录信息
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted == YES) {
NSLog(@"已经获取了通讯录信息");
}else{
NSLog(@"获取通讯录信息失败,\nerror-------%@", error);
}
});
//将获取的数据转化为出来
NSArray *addressArray = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
for(id object in addressArray){
ABRecordRef record = CFBridgingRetain(object);
//获取通讯录中的名字
NSString *firstName = CFBridgingRelease(ABRecordCopyValue(record, kABPersonFirstNameProperty));
NSLog(@"firstName --------------%@", firstName);
//获取通讯录中的email地址
CFArrayRef Emailarray = ABRecordCopyValue(record, kABPersonEmailProperty);
NSArray *emails = CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(Emailarray));
for (int i = 0; i < [emails count]; i++) {
NSLog(@"emailAddress--------------%@", [emails objectAtIndex:i]);
}
CFRelease(record);
}
// NSLog(@"%@", addressArray);
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
/* 参考
kABPersonFirstNameProperty,名字
kABPersonLastNameProperty,姓氏
kABPersonMiddleNameProperty,中间名
kABPersonPrefixProperty,前缀
kABPersonSuffixProperty,后缀
kABPersonNicknameProperty,昵称
kABPersonFirstNamePhoneticProperty,名字汉语拼音或音标
kABPersonLastNamePhoneticProperty,姓氏汉语拼音或音标
kABPersonMiddleNamePhoneticProperty,中间名汉语拼音或音标
kABPersonOrganizationProperty,组织名
kABPersonJobTitleProperty,头衔
kABPersonDepartmentProperty,部门
kABPersonNoteProperty,备注
kABPersonPhoneProperty,电话号码属性,kABMultiStringPropertyType类型多值属性;
kABPersonEmailProperty,Email属性,kABMultiStringPropertyType类型多值属性;
kABPersonURLProperty,URL属性,kABMultiStringPropertyType类型多值属性;
kABPersonRelatedNamesProperty,亲属关系人属性,kABMultiStringPropertyType类型多值属性;
kABPersonAddressProperty,地址属性,kABMultiDictionaryPropertyType类型多值属性;
kABPersonInstantMessageProperty,即时聊天属性,kABMultiDictionaryPropertyType类型多值属性;
kABPersonSocialProfileProperty,社交账号属性,kABMultiDictionaryPropertyType类型多值属性;
*/
IOS 获取通讯录中信息的更多相关文章
- iOS 获取通讯录中联系人的所有属性 by - zfqj
1 ABAddressBookRef addressBook = ABAddressBookCreate(); 2 3 CFArrayRef results = ABAddressBookCopyAr ...
- ios 获取通讯录的所有信息
iOS获取通讯录全部信息 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBoo ...
- iOS 获得通讯录中联系人的所有属性--b
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
//获取通讯录中的所有属性,并存储在 textView 中,已检验,切实可行.兼容io6 和 ios 7 ,而且ios7还没有权限确认提示. -(void)getAddressBook { ABAdd ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- Android软件开发之获取通讯录联系人信息
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来. 这一篇文章我主要带领同学们熟悉Android的通讯录机制. 图中选中 ...
- iOS获取通讯录 电话号码与姓名
// 还是导入 #import <AddressBook/AddressBook.h> - (void)fetchAddressBookBeforeIOS9{ ABAddressBookR ...
- iOS 获取通讯录里边的电话号码AddressBook
1 首先导入库 <AddressBook/AddressBook.h> 2 然后在导入#import <AddressBook/AddressBook.h>文件 3 声明 ...
- iOS 获取通讯录权限的时机
建议将获取通讯录权限的代码放到 -(void)viewDidAppear:(BOOL)animated 或 -(void)viewWillAppear:(BOOL)animated 假如放在 view ...
随机推荐
- 微信小程序,大多数人误解的8个问题
作者:王安,数字天堂DCloud公司创始人兼CEO 注:本文内容包含技术.商业,不懂技术的读者可以只看商业相关的内容.本文仅代表作者一家之言,如有不同意见,欢迎留言讨论~ 8个误解 坊间所传的信息很多 ...
- nginx 编译选项
内容有些多,一眼看来难免头昏脑胀,但坚持看完,相信你一定会有所收获. nginx参数: --prefix= 指向安装目录 --sbin-path 指向(执行)程序文件(nginx) --conf-pa ...
- [转载]windows下安装Python虚拟环境virtualenvwrapper-win
1 前言 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv 这个工具,就可以构建一系列 虚拟的Py ...
- DevExpress::XtraBars::BarEditItem获取EditValue值事件
//视图设计器中拖动一个barManager,添加一个bar,再添加一个BarEditItem控件,如下代码: private: DevExpress::XtraEditors::Repository ...
- fragment 学习
fragment需要id是必须属性 <fragment android:id="@+id/frg1" android:name="com ...
- codevs 4163 hzwer与逆序对
传送门 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果有序数对(I,j)满足:i<j,a[i]>a[j],则(i,j)是一对逆序对. 给定一个数列{a}, ...
- awk里的各种坑
今天又遇到一个,一旦需要定义一个局部数组(awk通过把局部变量定义在函数参数列表来实现局部这一特征)那么这个数组可以正常的操作,但是无法对他取长度,一旦使用length(tempArr)会得到这么一个 ...
- N.O.W,O.R,N.E.V.E.R--12days to LNOI2015
双向链表 单调队列,双端队列 单调栈 堆 带权并查集 hash 表 双hash 树状数组 线段树合并 平衡树 Treap 随机平衡二叉树 Scapegoat Tree 替罪羊树 朝鲜树 块状数组,块状 ...
- BZOJ 1487 无归岛
Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一 ...
- Android Wear开发 - 入门指引 - Eclipse开发平台搭建
开发平台配置 下载最新版本的ADT,详情见官网:http://developer.android.com/sdk/installing/installing-adt.html .(之前一直习惯于Goo ...