zoukankan      html  css  js  c++  java
  • 读取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

  • 相关阅读:
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    8.4 确定两个日期之间的月份数或年数
    (Java实现) 洛谷 P1553 数字反转(升级版)
  • 原文地址:https://www.cnblogs.com/weijie-1/p/5600120.html
Copyright © 2011-2022 走看看