获取通讯录-AddressBook(OC)

  1. 实现步骤-及代码
    // 1. 请求授权
        // 1.获取授权的状态
        ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
    
        // 2.判断授权状态,如果是未决定状态,才需要请求
        if (status == kABAuthorizationStatusNotDetermined) {
            // 2.1.创建通信录对象
            ABAddressBookRef addressBook = ABAddressBookCreate();
    
            // 2.2.请求授权
            ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            if (granted) {
                NSLog(@"授权成功");
            } else {
                NSLog(@"授权失败");
            }
        });
        }
    
    // 2. 判断授权状态, 如果已授权, 则继续; 未授权, 则提示用户, 并返回;
    
        // 1.获取授权的状态
        ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
    
        // 2.如果用户已经授权
        if (status != kABAuthorizationStatusAuthorized) return;
    
    // 3. 创建通讯录对象
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 4. 从通信录对象中, 获取所有的联系人
        CFArrayRef peopleArray = ABAddressBookCopyArrayOfAllPeople(addressBook);
    
    // 5. 遍历所有的联系人(每一个联系人都是一条记录)
        CFIndex peopleCount = CFArrayGetCount(peopleArray);
        for (CFIndex i = 0; i < peopleCount; i++) {
    
    // 6.获取到联系人
        ABRecordRef person = CFArrayGetValueAtIndex(peopleArray, i);
    
    // 7.获取姓名
        NSString *lastname = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
        NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
        NSLog(@"%@ %@", lastname, firstName);
    
        // 8. 获取电话号码
        ABMultiValueRef multiValue = ABRecordCopyValue(record, kABPersonPhoneProperty);
        CFIndex count = ABMultiValueGetCount(multiValue);
        for (int i = 0; i < count; i ++) {
            NSString *label = (__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex(multiValue, i);
            NSString *phone = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(multiValue, i);
            NSLog(@"%@---%@", label, phone);
    
        }
        CFRelease(multiValue);
    }
    
    9. 释放不再使用的对象
        CFRelease(peopleArray);
        CFRelease(addressBook);
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 内容概述 iOS给我们提供了四个框架来供我们使用:iOS9之前,有AddressBookUI.framewor...
    leesum阅读 1,265评论 0 3
  • 如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework ...
    JonesCxy阅读 853评论 0 2
  • 在ios中,有两个框架可以访问用户的通讯录 AddressBookUI.framework提供了联系人列表界面, ...
    Manba_小洛阅读 1,035评论 4 12
  • 前言iOS通讯录框架有AddressBook,AddressBookUI,Contacts,ContactsUI....
    天泽圣司tzss阅读 5,346评论 7 10
  • 武学千年,烟消云散的事儿 我是广东南海佛山人,姓叶名箬。 七岁那年,师父赠与我一根麻绳, “这麻绳作腰带,一条腰带...
    执意前行阅读 577评论 0 3

友情链接更多精彩内容