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 ...
随机推荐
- HTML 动态显示系统当前时间
HTML 动态显示系统当前时间: <div id="time"> <script> document.getElementById('time').inne ...
- OC之JSON数据解析
JSON介绍: 作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式 基于JavaScript的一个子集 易读性略差,编码手写难度大,数据量小 JSON格式取代了XML给网络传输带 ...
- phpcms get标签说明
{pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" db ...
- VC++ 列表控件的使用方法
列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值.MFC中使用CListCtrl类来封装列表控件的各种操作. 通过调用BOOL Create( DWORD ...
- for循环,列表和格式化输出
一:for 循环 1. 简单的说如果让你输出1到100之间的整数,用while该怎么实现呢? i= : print(i) i+= 看着是不是只有4行,但是有没有更加简单的办法,不妨我 ...
- UpdateLayeredWindow, Layered Windows, codeproject
http://www.codeproject.com/Articles/16362/Bring-your-frame-window-a-shadow http://www.codeproject.co ...
- Android Studio导入Eclipse项目
随着Google 对新Android编辑器Android Studio(以下简称AS)的版本不断更新,越来越多的人开始由熟悉的编辑器Eclipse转向AS,而Eclipse开发团队也坦言将放弃对Ecl ...
- Sort List ——LeetCode
Sort a linked list in O(n log n) time using constant space complexity. 链表排序,要求时间复杂度O(nlgn),我写的归并排序. ...
- Combinations ——LeetCode
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- BFS zoj 1649
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1649 //hnldyhy(303882171) 11:12:46 // z ...