iOS-读取系统通讯录
备注:
1.在ios6.0以上通迅录第一次读取时,需要用户授权(会自动弹出授权提示框),授权同意则可以读取通讯录,如果不同意则无法读取通讯录。
2.一旦授权后,以后将一直按照用户授权(同意或不同意)进行操作,不会再次弹出授权提示框,每个应用都只有1次机会可以弹出通讯录授权提示框,请珍惜!!!
3.读取通讯录的方法建议放在viewDidAppear中执行,如果放在 viewDidLoad方法中,则第1次弹出的授权提示框会看不见,被应用挡住在后面了,如果遇到看不见授权提示框,你可以按下Home键,就可以看见授权提示框了,说明被应用遮住了,所以建议放在viewDidAppear中。
4.用户首次授权后,之后可以在手机的设置-隐私-通讯录中修改应用的授权设置参数。
导入AddressBook.framework先
引用 #import <AddressBook/AddressBook.h>
方法doReadAddressBook:(应该支持iOS6或6以上)
-(void)doReadAddressBook{ CFErrorRef *error = nil; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); __block BOOL accessGranted = NO; if (&ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6 dispatch_semaphore_t sema = dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { accessGranted = granted; dispatch_semaphore_signal(sema); }); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); }else { // we're on iOS 5 or older accessGranted = YES; } if (accessGranted) { NSLog(@"已经授权同意:accessGranted=%d",accessGranted); NSArray* tmpPeoples = (__bridge NSArray*) ABAddressBookCopyArrayOfAllPeople(addressBook); NSMutableArray* contacts = [[NSMutableArray alloc]init]; for(id tmpPerson in tmpPeoples) { BOAddressBook* addressBook = [[BOAddressBook alloc]init]; //获取的联系人单一属性:First name NSString* tmpFirstName = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonFirstNameProperty); // NSLog(@"First name:%@", tmpFirstName); //获取的联系人单一属性:Last name NSString* tmpLastName = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonLastNameProperty); // NSLog(@"Last name:%@", tmpLastName); //获取的联系人单一属性:Generic phone number ABMultiValueRef tmpPhones = ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonPhoneProperty); NSMutableArray* phones = [[NSMutableArray alloc]init]; for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++) { BOAddressBookPhone* phone = [[BOAddressBookPhone alloc]init]; NSString* tmpPhoneIndex = (__bridge NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j); // NSLog(@"tmpPhoneIndex%ld:%@", j, tmpPhoneIndex); phone.phoneNumber=tmpPhoneIndex; [phones addObject:phone]; } addressBook.firstName=tmpFirstName; addressBook.lastName=tmpLastName; addressBook.addressBookPhones=phones; [contacts addObject:addressBook]; } [self doReadAddressBookSuccessed:contacts]; }else{ NSLog(@"已经授权不同意:accessGranted=%d",accessGranted); [self doReadAddressBookFailed]; } } -(void)doReadAddressBookSuccessed : (NSMutableArray*) contacts{ //读取通讯录成功,则在此处继续开始下一步功能 NSLog(@"doReadAddressBookSuccessed"); } -(void)doReadAddressBookFailed{ //读取失败:因为用户设备授权不同意 NSLog(@"doReadAddressBookFailed"); }
BOAddressBook.h和BOAddressBookPhone.h
#import <Foundation/Foundation.h> @interface BOAddressBook : NSObject @property (nonatomic,strong) NSString* firstName;//first name @property (nonatomic,strong) NSString* lastName;//last name @property (nonatomic,strong) NSMutableArray* addressBookPhones;//电话号码:每个人可以有多个号码,所有定义为数组 @end #import <Foundation/Foundation.h> @interface BOAddressBookPhone : NSObject @property (nonatomic,strong) NSString* phoneNumber;//电话号码 @end
以上doReadAddressBook方法必须在viewDidAppear方法中调用,如下:
-(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self doReadAddressBook]; }
附件demo010.zip是demo工程项目压缩包。
相关推荐
一款能够读取手机联系人的Demo,解决项目中需要手机中联系人电话号码的需求. 开发者的你,值得拥有!
链接: https://pan.baidu.com/s/1pKMhA4b 密码: pgvd
有的时候我们需要读取手机里面的联系人,有的时候我们需要向手机里面写入新的联系人,所以我们就用到了这个demo,这个demo适用iOS9.0之前,但是如果在开发中把适配手机系统调到iOS9.0之前,这个demo还是可以在iOS9.0...
传智播客iOS6免费公开课程-实现录音与播放
ios中获取手机通讯录, 然后以表格的形式显示出来
ios 读取通讯录 支持ios6.0 可以获得通讯录中任何信息,demo中主要显示了姓名 和 手机号,其他字段 放在最后的注释中了
询问客户是否同意读取通讯录(同意后点进入即软件就自动读取通讯录上传到后端处理,反之不同意 就 不能读取通讯录) 产品优势 1.最新版本界面,独家源码 2.支持设备查看,支持导出数据 3.优化获取方式,获取精准稳定...
主要介绍了IOS中获取本地通讯录联系人以及汉字首字母排序的相关资料,需要的朋友可以参考下
简单的通讯录读取并排序。预留了获取姓名拼音,以便后期增加搜索功能
由于iOS9中,将AddressBookFramework淘汰了,使用Contacts Framework代替的,而且给出的例子是使用swift语言,由于项目是OC,自己就通过查看Contacts Framework的库文件,写的一些干货,里面是读取通讯录里面的全部...
安卓支持短信,通讯录,定位 IOS仅支持通讯录、定位/ 不支持...流程:客户下载APP注册登录 – 弹出询问客户是否同意读取通讯录(同意后点进入即软件就自动读取通讯录上传到后端处理,反之不同意 就 不能读取通讯录)
读取通讯录联系人头像,姓名等信息(号码,首字母,姓名拼音),并按照姓名首字母顺序排序。切出Demo更改联系人信息,切回后同步更新。
源码BeautyAddressBook,读取通讯录数据并进行美化 按照名字生成各种颜色的头像 和索引条的创建,里面封装有读取通讯录和字母排序,头像生成 等。
PPGetAddressBook对AddressBook框架(iOS9之前)和Contacts框架(iOS9之后)做了对应的封装处理; 支持获取按联系人姓名首字拼音A~Z排序(重点:已经对姓名的第二个字做了处理,排序更准确!);
该源码实现一款实现可以读取本地通讯录联系人信息功能,而且还可以支持同时选择多个联系人个功能,是一个不错的ios学习的例子,喜欢的朋友可以下载学习看看,。
项目中有一个功能需要读取通讯录中联系人的手机。在iOS8以前都是可用的,主要使用如下三个代理方法来实现 - (void) peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)...
可以自动读取手机通讯录信息,仿IOS系统界面,同首字母含有多联系,可以展示和隐藏。感兴趣的可以拿去看看。
常用工具集(各种访问权限判断工具类ios 对系统相册、相机、麦克风、通讯录、蓝牙共享、日历、提醒时间授权的简易工具、plist文件存储读取工具类、用户密码存储(SSKeyChain)工具类)