`
stephen830
  • 浏览: 3011380 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

iOS-读取系统通讯录

 
阅读更多

 

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-读取手机通讯录.zip

    在iOS开发中,读取手机通讯录是一项常见的需求,尤其在社交、商务或者备份类应用中。本Demo展示了如何在iOS应用中实现这一功能。这个压缩包“ios-读取手机通讯录.zip”包含了实现这一功能的具体代码示例,帮助开发者...

    ios-读取iOS10 iOS9通讯录.zip

    在提供的压缩文件"iOS9 10通讯录.rtf"中,可能包含了关于如何在这些版本的iOS上读取通讯录的详细步骤或代码示例。通常,RTF文件是一种富文本格式,可以包含文本、格式化信息和嵌入的图片,用于展示教程或代码片段。...

    ios-类似于通讯录.zip

    这需要与iOS的联系人框架(Contacts Framework)集成,以便读取和写入用户的联系人信息。开发者需要了解如何请求访问用户联系人的权限,以及如何使用CNContact和CNContactStore类来操作联系人数据。 此外,为了提高...

    ios-类似于通讯录检索.zip

    - Auto Layout是iOS中的布局系统,用于自动调整UI元素的位置和大小,确保在不同尺寸的设备上都能正确显示。在创建通讯录界面时,可能需要用到它来定义各个UI元素的约束。 7. **Search Bar**: - UISearchBar是iOS...

    ios-系统通讯录读取 iOS9.0.zip

    有的时候我们需要读取手机里面的联系人,有的时候我们需要向手机里面写入新的联系人,所以我们就用到了这个demo,这个demo适用iOS9.0之前,但是如果在开发中把适配手机系统调到iOS9.0之前,这个demo还是可以在iOS9.0...

    ios-电话通讯录-Demo.zip

    这个名为“ios-电话通讯录-Demo.zip”的压缩包文件很可能包含了一个演示如何在iOS应用中获取和排序用户通讯录的示例代码。接下来,我们将深入探讨iOS中与通讯录相关的知识点。 1. **通讯录框架(Contacts Framework...

    ios-通讯录.zip

    在iOS开发中,通讯录是应用常常需要交互的重要部分,特别是在个人信息管理或者社交类应用中。这个名为"ios-通讯录.zip"的压缩包显然包含了关于如何在iOS应用中自定义头像并修改通讯录内容的示例代码或资源。让我们...

    ios-方钉钉的通讯录.zip

    在iOS系统中,Apple提供了 Contacts Framework 和 ContactsUI Framework,这两个框架为开发者提供了与系统通讯录进行交互的能力。Contacts Framework 主要用于读取、创建、修改联系人信息,而ContactsUI Framework则...

    ios-聊天通讯录.zip

    7. **数据同步**:如果应用需要同步用户的手机通讯录,可以利用`CNContact框架`来读取和更新设备上的联系人信息。 关于压缩包内的"MailList"文件,可能是实现了邮件列表的功能,与通讯录相关联,可能包含发送、接收...

    传智播客iOS6免费公开课程-读取通讯录

    在iOS开发中,读取和操作用户通讯录是一项常见的功能,尤其在社交应用或需要集成联系人管理的...通过上述知识点的学习和实践,开发者可以有效地在iOS应用中实现读取通讯录和录音播放功能,为用户提供更丰富的交互体验。

    ios-通讯录模糊查询.zip

    首先,我们需要了解iOS系统中处理通讯录的主要框架——`Contacts Framework`。这个框架提供了访问设备上通讯录的接口,包括读取、写入和修改联系人信息。要进行模糊查询,我们主要会用到`CNContact`类和`...

    ios-通讯录(多用户登录).zip

    - **Contacts框架**:iOS提供Contacts框架,用于读取、写入和管理用户的联系人数据。应用需要获取用户的权限才能访问通讯录,通过`CNContactStore`类请求授权。 - **权限管理**:确保应用仅在获得用户许可后才访问...

    swift-ZHContactManager-通讯录操作选择联系人添加新联系人添加到现有联系人;

    在iOS应用开发中,Swift语言提供了强大的框架来处理用户的通讯录数据,这其中包括读取、修改和添加联系人。`ZHContactManager` 是一个专为Swift开发者设计的库,它简化了与iOS系统通讯录(Contacts框架)的交互,...

    iOS9 通讯录新框架Demo

    2. CNContactStore:用于与系统通讯录数据库进行交互,获取或修改联系人数据。 3. CNSaveRequest:用于创建、更新或删除联系人和联系人分组的请求对象。 4. CNAuthorizationStatus:表示应用对联系人访问权限的状态...

    ios中获取手机通讯录

    在iOS平台上,获取手机通讯录是一项常见的功能,它允许应用程序访问用户的联系人信息,并进行展示或处理。在本文中,我们将深入探讨如何在iOS中实现这一功能,以及如何将获取到的数据以表格形式呈现。 首先,为了...

    ios-管理分组和联系人.zip

    iOS系统提供了Contacts框架,它是苹果官方提供的API,用于访问和操作设备上的联系人和联系人分组。通过这个框架,开发者可以创建、读取、更新和删除联系人,以及创建、删除和管理联系人分组。 1. **Contacts框架**...

    ios应用程序之通讯录

    对于通讯录功能的实现,iOS提供了`AddressBook`框架(在iOS 9及以上版本被`Contacts`框架取代),用于处理与系统通讯录的交互。以下是实现通讯录功能的一些关键步骤: 1. **权限请求**:在iOS中,访问用户通讯录...

Global site tag (gtag.js) - Google Analytics