iOS 获取通讯录联系人信息

导入

#import <AddressBook/AddressBook.h>


-(void)ReadAllPeoples


{

    //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录

    int __block tip=0;

    

    //声明一个通讯簿的引用

    ABAddressBookRef tmpAddressBook = nil;

    //判断授权情况,因为在IOS6.0之后和之前的权限申请方式有所差别,这里做个判断

    if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {

        //创建通讯簿的引用

        tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);

        //创建一个初始信号量为0的信号

        dispatch_semaphore_t sema=dispatch_semaphore_create(0);

        //申请访问权限

        ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){

            //greantedYES是表示用户允许,否则为不允许

            if(!greanted){

                tip=1;

            }

            //发送一次信号

            dispatch_semaphore_signal(sema);

        });

        //等待信号触发

        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

    }

    else

    {

        //IOS6之前

        tmpAddressBook =ABAddressBookCreate();

    }

    if(tip){

        //做一个友好的提示

        UIAlertView*alart = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请您设置允许芝麻开门访问您的通讯录\n设置>隐私>通讯录" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil,nil];

        [alart show];

        return;

    }

    //若允许访问,则tmpAddressBook不为空,否则为空

    //取得本地所有联系人记录

    if (tmpAddressBook==nil) {

        return ;

    };

    //获取所有联系人的数组

    NSArray* tmpPeoples = (__bridge NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);

//    //获取联系人总数

//    CFIndex number=ABAddressBookGetPersonCount(tmpAddressBook);

    //进行遍历

    for(id tmpPerson in tmpPeoples)

    {

        //获取的联系人单一属性名字: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);

        

        //获取当前联系人单一属性中间名:MiddleName

        NSString*tmpMiddleName=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonMiddleNameProperty);

        NSLog(@"Middle name:%@",tmpMiddleName);

    

        //获取当前联系人的单一属性名字前缀:Prefix

        NSString*tmpPrefix=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonPrefixProperty);

        NSLog(@"Prefix:%@",tmpPrefix);

        

        //获取当前联系人的单一属性名字后缀:Suffix

        NSString*tmpSuffix=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonSuffixProperty);

        NSLog(@"Suffix:%@",tmpSuffix);

        

        //获取的联系人单一属性昵称:Nickname

        NSString* tmpNickname = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonNicknameProperty);

        NSLog(@"Nickname:%@", tmpNickname);

        

        //获取当前联系人的单一属性名字拼音:FirstNamePhonetic

        NSString*tmpFirstNamePhoneic=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonFirstNamePhoneticProperty);

        NSLog(@"FirstNamePhonetic:%@",tmpFirstNamePhoneic);

        

        //获取当前联系人的单一属性姓氏拼音:LastNamePhonetic

        NSString*tmpLastNamePhoneic=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonLastNamePhoneticProperty);

        NSLog(@"LastNamePhonetic:%@",tmpLastNamePhoneic);

        

        //获取当前联系人的单一属性中间名拼音:

        NSString*tmpMiddleNamePhonetic=(__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonMiddleNamePhoneticProperty);

        NSLog(@"MiddleNamePhonetic:%@",tmpMiddleNamePhonetic);

        

        //获取的联系人单一属性公司:Company name

        NSString* tmpCompanyname = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonOrganizationProperty);

        NSLog(@"Company name:%@", tmpCompanyname);

        

        //获取的联系人单一属性职位:Job Title

        NSString* tmpJobTitle= (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonJobTitleProperty);

        NSLog(@"Job Title:%@", tmpJobTitle);

        

        //获取的联系人单一属性部门:Department name

        NSString* tmpDepartmentName = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonDepartmentProperty);

        NSLog(@"Department name:%@", tmpDepartmentName);

        

        //获取的联系人单一属性邮箱 注意是数组:Email(s)

        ABMultiValueRef tmpEmails = ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonEmailProperty);

        for(NSInteger j = 0;j<ABMultiValueGetCount(tmpEmails); j++)

        {

            NSString* tmpEmailIndex = (__bridge NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);

            NSLog(@"Emails%ld:%@",(long)j, tmpEmailIndex);

        }

        CFRelease(tmpEmails);

        

        //获取的联系人单一属性生日:Birthday

        NSDate* tmpBirthday = (__bridge NSDate*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonBirthdayProperty);

        NSLog(@"Birthday:%@", tmpBirthday);

        

        //获取的联系人单一属性备注:Note

        NSString* tmpNote = (__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonNoteProperty);

        NSLog(@"Note:%@", tmpNote);

        

        //获取的联系人单一属性电话 数组:Generic phone number

        ABMultiValueRef tmpPhones = ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonPhoneProperty);

        for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)

        {

            NSString* tmpPhoneIndex = (__bridge NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);

            NSLog(@"tmpPhoneIndex%ld:%@",(long)j, tmpPhoneIndex);

        }

        CFRelease(tmpPhones);

        

        //获取创建当前联系人的时间 注意是NSDate

        NSDate*tmpCreationDate=(__bridge NSDate*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonCreationDateProperty);

        NSLog(@"CreationDate:%@",tmpCreationDate);

        

        //获取最近修改当前联系人的时间

        NSDate*tmpModificationDate=(__bridge NSDate*)ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonModificationDateProperty);

        NSLog(@"ModificationDate:%@",tmpModificationDate);

        

        //获取地址

        ABMultiValueRef tmpAddressArray=ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson), kABPersonAddressProperty);

        for(int j=0;j<ABMultiValueGetCount(tmpAddressArray);j++){

             //地址类型(工作或者是住宅)

             NSString * type = (__bridge NSString*)(ABMultiValueCopyLabelAtIndex(tmpAddressArray,j));

             NSLog(@"type:%@",type);

             NSDictionary * temDic = (__bridge NSDictionary*)(ABMultiValueCopyValueAtIndex(tmpAddressArray,j));

             //地址字符串,可以按需求格式化

             NSLog(@"temDic:%@",temDic);

            //国家

             NSString*tmpAddressCountry=[temDic valueForKey:(NSString*)kABPersonAddressCountryKey];

             NSLog(@"AddressCountry:%@",tmpAddressCountry);

            //

             NSString*tmpAddressState=[temDic valueForKey:(NSString*)kABPersonAddressStateKey];

             NSLog(@"AddressState:%@",tmpAddressState);

            //

             NSString*tmpAddressCity=[temDic valueForKey:(NSString*)kABPersonAddressCityKey];

             NSLog(@"AddressCity:%@",tmpAddressCity);

            //街道

             NSString*tmpAddressStreet=[temDic valueForKey:(NSString*)kABPersonAddressStreetKey];

             NSLog(@"AddressStreet:%@",tmpAddressStreet);

            //邮编

             NSString*tmpAddressZIP=[temDic valueForKey:(NSString*)kABPersonAddressZIPKey];

             NSLog(@"AddressZIP:%@",tmpAddressZIP);

        }

        

        //获取当前联系人头像图片

        NSData*userImage=(__bridge NSData*)(ABPersonCopyImageData((__bridge ABRecordRef)tmpPerson));

        UIImage*tmpHeaderImage=[UIImage imageWithData:userImage];

        

        //获取当前联系人纪念日

        NSMutableArray*dateArr=[[NSMutableArray alloc]init];

        ABMultiValueRef dates=ABRecordCopyValue((__bridge ABRecordRef)(tmpPerson),kABPersonDateProperty);

        for(NSInteger j=0;j<ABMultiValueGetCount(dates);j++){

            //获取纪念日日期

            NSDate*date=(__bridge NSDate*)(ABMultiValueCopyValueAtIndex(dates,j));

            NSLog(@"date:%@",date);

            //获取纪念日名称

            NSString*str=(__bridge NSString*)(ABMultiValueCopyLabelAtIndex(dates,j));

            NSLog(@"dateName:%@",str);

            NSDictionary * temDic = [NSDictionary dictionaryWithObject:date forKey:str];

            [dateArr addObject:temDic];

        }

        

        //


    }

    //释放内存

    CFRelease(tmpAddressBook);

    

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值