码迷,mamicode.com
首页 > 移动开发 > 详细

iOS --提取本地<通讯录>数据 <1>

时间:2018-06-23 22:43:39      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:patch   link   org   i++   sel   手机   表示   system   nsstring   

#pragma mark - 获取手机所有联系人  
- (void)obtainPhoneAllContact  
{  
    //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录  
    int   __block tip=0;  
    //声明一个通讯簿的引用  
    ABAddressBookRef addBook =nil;  
    //因为在IOS6.0之后和之前的权限申请方式有所差别,这里做个判断  
    if   ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {  
        //创建通讯簿的引用  
        addBook=ABAddressBookCreateWithOptions(NULL, NULL);  
        //创建一个出事信号量为0的信号  
        dispatch_semaphore_t sema=dispatch_semaphore_create(0);  
        //申请访问权限  
        ABAddressBookRequestAccessWithCompletion(addBook, ^( bool   greanted, CFErrorRef error)        {  
            //greanted为YES是表示用户允许,否则为不允许  
            if   (!greanted) {  
                tip=1;  
            }  
            //发送一次信号  
            dispatch_semaphore_signal(sema);  
        });  
        //等待信号触发  
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  
    } else {  
        //IOS6之前  
        addBook =ABAddressBookCreate();  
    }  
    if   (tip) {  
        //做一个友好的提示  
        UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@ "温馨提示"   message:@ "请您设置允许APP访问您的通讯录\nSettings>General>Privacy"   delegate:self cancelButtonTitle:@ "确定"   otherButtonTitles:nil, nil nil];  
        [alart show];  
        return ;  
    }  
      
    //获取所有联系人的数组  
    CFArrayRef allLinkPeople = ABAddressBookCopyArrayOfAllPeople(addBook);  
    //获取联系人总数  
    CFIndex number = ABAddressBookGetPersonCount(addBook);  
    //进行遍历  
    for   (NSInteger i=0; i<number; i++) {  
        //获取联系人对象的引用  
        ABRecordRef  people = CFArrayGetValueAtIndex(allLinkPeople, i);  
        //获取当前联系人名字  
        NSString*firstName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));  
        //获取当前联系人姓氏  
        NSString*lastName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));  
          
        //获取当前联系人的公司  
        NSString*organization=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonOrganizationProperty));  
        //获取当前联系人的职位  
        NSString*job=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonJobTitleProperty));  
        //获取当前联系人的部门  
        NSString*department=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonDepartmentProperty));  
        //获取当前联系人的电话 数组  
        NSMutableArray * phoneArr = [[NSMutableArray alloc]init];  
        ABMultiValueRef phones= ABRecordCopyValue(people, kABPersonPhoneProperty);  
        for   (NSInteger j=0; j<ABMultiValueGetCount(phones); j++) {  
            [phoneArr addObject:(__bridge NSString *)(ABMultiValueCopyValueAtIndex(phones, j))];  
        }  
          
        //获取当前联系人头像图片  
        NSData*userImage=(__bridge NSData*)(ABPersonCopyImageData(people));  
          
        if (lastName == NULL) {  
            NSLog(@"姓名:%@",firstName);  
        }  
        else if (firstName == NULL)  
        {  
            NSLog(@"姓名:%@",lastName);  
        }  
        else if(firstName != NULL && lastName != NULL){  
            NSLog(@"姓名:%@%@",lastName,firstName);  
        }  
        NSString *str = phoneArr;  
        NSLog(@"联系电话:%@",phoneArr);  
          
        if (userImage == NULL) {  
            NSLog(@"头像为空");  
        }  
    }  
}  

 

iOS --提取本地<通讯录>数据 <1>

标签:patch   link   org   i++   sel   手机   表示   system   nsstring   

原文地址:https://www.cnblogs.com/shenlaiyaoshi/p/9218917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!