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工程项目压缩包。
相关推荐
在iOS开发中,读取手机通讯录是一项常见的需求,尤其在社交、商务或者备份类应用中。本Demo展示了如何在iOS应用中实现这一功能。这个压缩包“ios-读取手机通讯录.zip”包含了实现这一功能的具体代码示例,帮助开发者...
在提供的压缩文件"iOS9 10通讯录.rtf"中,可能包含了关于如何在这些版本的iOS上读取通讯录的详细步骤或代码示例。通常,RTF文件是一种富文本格式,可以包含文本、格式化信息和嵌入的图片,用于展示教程或代码片段。...
这需要与iOS的联系人框架(Contacts Framework)集成,以便读取和写入用户的联系人信息。开发者需要了解如何请求访问用户联系人的权限,以及如何使用CNContact和CNContactStore类来操作联系人数据。 此外,为了提高...
- Auto Layout是iOS中的布局系统,用于自动调整UI元素的位置和大小,确保在不同尺寸的设备上都能正确显示。在创建通讯录界面时,可能需要用到它来定义各个UI元素的约束。 7. **Search Bar**: - UISearchBar是iOS...
有的时候我们需要读取手机里面的联系人,有的时候我们需要向手机里面写入新的联系人,所以我们就用到了这个demo,这个demo适用iOS9.0之前,但是如果在开发中把适配手机系统调到iOS9.0之前,这个demo还是可以在iOS9.0...
这个名为“ios-电话通讯录-Demo.zip”的压缩包文件很可能包含了一个演示如何在iOS应用中获取和排序用户通讯录的示例代码。接下来,我们将深入探讨iOS中与通讯录相关的知识点。 1. **通讯录框架(Contacts Framework...
在iOS开发中,通讯录是应用常常需要交互的重要部分,特别是在个人信息管理或者社交类应用中。这个名为"ios-通讯录.zip"的压缩包显然包含了关于如何在iOS应用中自定义头像并修改通讯录内容的示例代码或资源。让我们...
在iOS系统中,Apple提供了 Contacts Framework 和 ContactsUI Framework,这两个框架为开发者提供了与系统通讯录进行交互的能力。Contacts Framework 主要用于读取、创建、修改联系人信息,而ContactsUI Framework则...
7. **数据同步**:如果应用需要同步用户的手机通讯录,可以利用`CNContact框架`来读取和更新设备上的联系人信息。 关于压缩包内的"MailList"文件,可能是实现了邮件列表的功能,与通讯录相关联,可能包含发送、接收...
在iOS开发中,读取和操作用户通讯录是一项常见的功能,尤其在社交应用或需要集成联系人管理的...通过上述知识点的学习和实践,开发者可以有效地在iOS应用中实现读取通讯录和录音播放功能,为用户提供更丰富的交互体验。
首先,我们需要了解iOS系统中处理通讯录的主要框架——`Contacts Framework`。这个框架提供了访问设备上通讯录的接口,包括读取、写入和修改联系人信息。要进行模糊查询,我们主要会用到`CNContact`类和`...
- **Contacts框架**:iOS提供Contacts框架,用于读取、写入和管理用户的联系人数据。应用需要获取用户的权限才能访问通讯录,通过`CNContactStore`类请求授权。 - **权限管理**:确保应用仅在获得用户许可后才访问...
在iOS应用开发中,Swift语言提供了强大的框架来处理用户的通讯录数据,这其中包括读取、修改和添加联系人。`ZHContactManager` 是一个专为Swift开发者设计的库,它简化了与iOS系统通讯录(Contacts框架)的交互,...
2. CNContactStore:用于与系统通讯录数据库进行交互,获取或修改联系人数据。 3. CNSaveRequest:用于创建、更新或删除联系人和联系人分组的请求对象。 4. CNAuthorizationStatus:表示应用对联系人访问权限的状态...
在iOS平台上,获取手机通讯录是一项常见的功能,它允许应用程序访问用户的联系人信息,并进行展示或处理。在本文中,我们将深入探讨如何在iOS中实现这一功能,以及如何将获取到的数据以表格形式呈现。 首先,为了...
iOS系统提供了Contacts框架,它是苹果官方提供的API,用于访问和操作设备上的联系人和联系人分组。通过这个框架,开发者可以创建、读取、更新和删除联系人,以及创建、删除和管理联系人分组。 1. **Contacts框架**...
对于通讯录功能的实现,iOS提供了`AddressBook`框架(在iOS 9及以上版本被`Contacts`框架取代),用于处理与系统通讯录的交互。以下是实现通讯录功能的一些关键步骤: 1. **权限请求**:在iOS中,访问用户通讯录...