iOS开发之提取本地通讯录数据

向凡神致敬~


iOS中若需获取本地通讯录数据需在工程中导入以下库:AddressBook.framework

获取本地通讯录数据示例程序如下:

[objc]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #pragma mark - 获取手机所有联系人  
  2. - (void)obtainPhoneAllContact  
  3. {  
  4.     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录  
  5.     int   __block tip=0;  
  6.     //声明一个通讯簿的引用  
  7.     ABAddressBookRef addBook =nil;  
  8.     //因为在IOS6.0之后和之前的权限申请方式有所差别,这里做个判断  
  9.     if   ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {  
  10.         //创建通讯簿的引用  
  11.         addBook=ABAddressBookCreateWithOptions(NULLNULL);  
  12.         //创建一个出事信号量为0的信号  
  13.         dispatch_semaphore_t sema=dispatch_semaphore_create(0);  
  14.         //申请访问权限  
  15.         ABAddressBookRequestAccessWithCompletion(addBook, ^( bool   greanted, CFErrorRef error)        {  
  16.             //greanted为YES是表示用户允许,否则为不允许  
  17.             if   (!greanted) {  
  18.                 tip=1;  
  19.             }  
  20.             //发送一次信号  
  21.             dispatch_semaphore_signal(sema);  
  22.         });  
  23.         //等待信号触发  
  24.         dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  
  25.     } else {  
  26.         //IOS6之前  
  27.         addBook =ABAddressBookCreate();  
  28.     }  
  29.     if   (tip) {  
  30.         //做一个友好的提示  
  31.         UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@ "温馨提示"   message:@ "请您设置允许APP访问您的通讯录\nSettings>General>Privacy"   delegate:self cancelButtonTitle:@ "确定"   otherButtonTitles:nil, nil nil];  
  32.         [alart show];  
  33.         return ;  
  34.     }  
  35.       
  36.     //获取所有联系人的数组  
  37.     CFArrayRef allLinkPeople = ABAddressBookCopyArrayOfAllPeople(addBook);  
  38.     //获取联系人总数  
  39.     CFIndex number = ABAddressBookGetPersonCount(addBook);  
  40.     //进行遍历  
  41.     for   (NSInteger i=0; i<number; i++) {  
  42.         //获取联系人对象的引用  
  43.         ABRecordRef  people = CFArrayGetValueAtIndex(allLinkPeople, i);  
  44.         //获取当前联系人名字  
  45.         NSString*firstName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));  
  46.         //获取当前联系人姓氏  
  47.         NSString*lastName=(__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));  
  48.           
  49.         //获取当前联系人的公司  
  50.         NSString*organization=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonOrganizationProperty));  
  51.         //获取当前联系人的职位  
  52.         NSString*job=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonJobTitleProperty));  
  53.         //获取当前联系人的部门  
  54.         NSString*department=(__bridge NSString*)(ABRecordCopyValue(people, kABPersonDepartmentProperty));  
  55.         //获取当前联系人的电话 数组  
  56.         NSMutableArray * phoneArr = [[NSMutableArray alloc]init];  
  57.         ABMultiValueRef phones= ABRecordCopyValue(people, kABPersonPhoneProperty);  
  58.         for   (NSInteger j=0; j<ABMultiValueGetCount(phones); j++) {  
  59.             [phoneArr addObject:(__bridge NSString *)(ABMultiValueCopyValueAtIndex(phones, j))];  
  60.         }  
  61.           
  62.         //获取当前联系人头像图片  
  63.         NSData*userImage=(__bridge NSData*)(ABPersonCopyImageData(people));  
  64.           
  65.         if (lastName == NULL) {  
  66.             NSLog(@"姓名:%@",firstName);  
  67.         }  
  68.         else if (firstName == NULL)  
  69.         {  
  70.             NSLog(@"姓名:%@",lastName);  
  71.         }  
  72.         else if(firstName != NULL && lastName != NULL){  
  73.             NSLog(@"姓名:%@%@",lastName,firstName);  
  74.         }  
  75.         NSString *str = phoneArr;  
  76.         NSLog(@"联系电话:%@",phoneArr);  
  77.           
  78.         if (userImage == NULL) {  
  79.             NSLog(@"头像为空");  
  80.         }  
  81.     }  
  82. }  





本文有因为问题请联系

QQ:563699115

Telephone:18341266547


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值