• 读取iOS通讯录


    首先导入头文件 

    #import <AddressBook/AddressBook.h>

    获取权限 读取通讯录

    - (void)loadPerson
    {
        ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
    
        if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
            ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error){
    
                CFErrorRef *error1 = NULL;
                ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error1);
                [self copyAddressBook:addressBook];
            });
        }
        else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){
    
            CFErrorRef *error = NULL;
            ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
            [self copyAddressBook:addressBook];
        }
        else {
            dispatch_async(dispatch_get_main_queue(), ^{
            // 用户不给权限
            });
        }
    }

    获取每个联系人的信息 可以用模型存储起来

    - (void)copyAddressBook:(ABAddressBookRef)addressBook
    {
        CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);
        CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
        
        for ( int i = 0; i < numberOfPeople; i++){
            ABRecordRef person = CFArrayGetValueAtIndex(people, i);
            
            NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
            NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
            
            //读取middlename
            NSString *middlename = (__bridge NSString*)ABRecordCopyValue(person, kABPersonMiddleNameProperty);
            NSLog(@"%@",middlename);
            //读取prefix前缀
            NSString *prefix = (__bridge NSString*)ABRecordCopyValue(person, kABPersonPrefixProperty);
            //读取suffix后缀
            NSString *suffix = (__bridge NSString*)ABRecordCopyValue(person, kABPersonSuffixProperty);
            //读取nickname呢称
            NSString *nickname = (__bridge NSString*)ABRecordCopyValue(person, kABPersonNicknameProperty);
            NSLog(@"%@",nickname);
            //读取firstname拼音音标
            NSString *firstnamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNamePhoneticProperty);
            //读取lastname拼音音标
            NSString *lastnamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNamePhoneticProperty);
            //读取middlename拼音音标
            NSString *middlenamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonMiddleNamePhoneticProperty);
    //        NSLog(@"%@",middlenamePhonetic)
            //读取organization公司
            NSString *organization = (__bridge NSString*)ABRecordCopyValue(person, kABPersonOrganizationProperty);
            //读取jobtitle工作
            NSString *jobtitle = (__bridge NSString*)ABRecordCopyValue(person, kABPersonJobTitleProperty);
            //读取department部门
            NSString *department = (__bridge NSString*)ABRecordCopyValue(person, kABPersonDepartmentProperty);
            //读取birthday生日
            NSDate *birthday = (__bridge NSDate*)ABRecordCopyValue(person, kABPersonBirthdayProperty);
            //读取note备忘录
            NSString *note = (__bridge NSString*)ABRecordCopyValue(person, kABPersonNoteProperty);
            //第一次添加该条记录的时间
            NSString *firstknow = (__bridge NSString*)ABRecordCopyValue(person, kABPersonCreationDateProperty);
            NSLog(@"第一次添加该条记录的时间%@
    ",firstknow);
            //最后一次修改該条记录的时间
            NSString *lastknow = (__bridge NSString*)ABRecordCopyValue(person, kABPersonModificationDateProperty);
            NSLog(@"最后一次修改該条记录的时间%@
    ",lastknow);
            
            //获取email多值
            ABMultiValueRef email = ABRecordCopyValue(person, kABPersonEmailProperty);
            int emailcount = ABMultiValueGetCount(email);
            for (int x = 0; x < emailcount; x++)
            {
                //获取email Label
                NSString* emailLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(email, x));
                //获取email值
                NSString* emailContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(email, x);
            }
            //读取地址多值
            ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty);
            int count = ABMultiValueGetCount(address);
            
            for(int j = 0; j < count; j++)
            {
                //获取地址Label
                NSString* addressLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(address, j);
                //获取該label下的地址6属性
                NSDictionary* personaddress =(__bridge NSDictionary*) ABMultiValueCopyValueAtIndex(address, j);
                NSString* country = [personaddress valueForKey:(NSString *)kABPersonAddressCountryKey];
                NSString* city = [personaddress valueForKey:(NSString *)kABPersonAddressCityKey];
                NSString* state = [personaddress valueForKey:(NSString *)kABPersonAddressStateKey];
                NSString* street = [personaddress valueForKey:(NSString *)kABPersonAddressStreetKey];
                NSString* zip = [personaddress valueForKey:(NSString *)kABPersonAddressZIPKey];
                NSString* coutntrycode = [personaddress valueForKey:(NSString *)kABPersonAddressCountryCodeKey];
            }
            
            //获取dates多值
            ABMultiValueRef dates = ABRecordCopyValue(person, kABPersonDateProperty);
            int datescount = ABMultiValueGetCount(dates);
            for (int y = 0; y < datescount; y++)
            {
                //获取dates Label
                NSString* datesLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(dates, y));
                //获取dates值
                NSString* datesContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(dates, y);
            }
            //获取kind值
            CFNumberRef recordType = ABRecordCopyValue(person, kABPersonKindProperty);
            if (recordType == kABPersonKindOrganization) {
                // it's a company
                NSLog(@"it's a company
    ");
            } else {
                // it's a person, resource, or room
                NSLog(@"it's a person, resource, or room
    ");
            }
            
            
            //获取IM多值
            ABMultiValueRef instantMessage = ABRecordCopyValue(person, kABPersonInstantMessageProperty);
            for (int l = 1; l < ABMultiValueGetCount(instantMessage); l++)
            {
                //获取IM Label
                NSString* instantMessageLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(instantMessage, l);
                //获取該label下的2属性
                NSDictionary* instantMessageContent =(__bridge NSDictionary*) ABMultiValueCopyValueAtIndex(instantMessage, l);
                NSString* username = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageUsernameKey];
                
                NSString* service = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageServiceKey];
            }
            
            //读取电话多值
            ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty);
            for (int k = 0; k<ABMultiValueGetCount(phone); k++)
            {
                //获取电话Label
                NSString * personPhoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, k));
                //获取該Label下的电话值
                NSString * personPhone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phone, k);
                NSLog(@"%@",personPhone);
            }
            
            //获取URL多值
            ABMultiValueRef url = ABRecordCopyValue(person, kABPersonURLProperty);
            for (int m = 0; m < ABMultiValueGetCount(url); m++)
            {
                //获取电话Label
                NSString * urlLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(url, m));
                //获取該Label下的电话值
                NSString * urlContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(url,m);
                NSLog(@"%@",urlContent);
            }
            
            //读取照片
            NSData *image = (__bridge NSData*)ABPersonCopyImageData(person);
            
        }
    }

    ok 关键大家要注意

    Release

  • 相关阅读:
    [Web]flask-excel实现excel文件下载的前后端实现
    [python]UnicodeEncodeError: 'gbk' codec can't encode character 'ufffd'
    [vscode] pylint在虚拟环境下错误告警问题
    [转]jQuery 选择器和dom操作
    用户认证过程及用户认证相关问题整理
    [mariadb]Windows Mariadb 10.2安装过程
    [Python]Flask 源代码分析-config
    【Weiss】【第03章】练习3.9:大整数运算包
    【Weiss】【第03章】练习3.8:有序多项式求幂
    【Weiss】【第03章】链表例程的一些修改
  • 原文地址:https://www.cnblogs.com/weijie-1/p/5600120.html
Copyright © 2020-2023  润新知