IOS如何访问通讯录

原创 2015年07月10日 14:00:06

实现方法:

[plain] view plaincopy
  1. //读取所有联系人  
  2.   
  3. -(void)ReadAllPeoples  
  4.   
  5. {  
  6.       
  7.     //取得本地通信录名柄  
  8.       
  9.     ABAddressBookRef tmpAddressBook = nil;  
  10.       
  11.     if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {  
  12.         tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);  
  13.         dispatch_semaphore_t sema=dispatch_semaphore_create(0);  
  14.         ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){  
  15.             dispatch_semaphore_signal(sema);  
  16.         });  
  17.       
  18.     dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  
  19.     dispatch_release(sema);  
  20.     }  
  21.     else  
  22.     {  
  23.         tmpAddressBook =ABAddressBookCreate();  
  24.     }  
  25.     //取得本地所有联系人记录  
  26.       
  27.       
  28.     if (tmpAddressBook==nil) {  
  29.         return ;  
  30.     };  
  31.     NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);  
  32.       
  33.     for(id tmpPerson in tmpPeoples)  
  34.           
  35.     {  
  36.           
  37.         //获取的联系人单一属性:First name  
  38.           
  39.         NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);  
  40.           
  41.         NSLog(@"First name:%@", tmpFirstName);  
  42.           
  43.         [tmpFirstName release];  
  44.           
  45.         //获取的联系人单一属性:Last name  
  46.           
  47.         NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);  
  48.           
  49.         NSLog(@"Last name:%@", tmpLastName);  
  50.           
  51.         [tmpLastName release];  
  52.           
  53.         //获取的联系人单一属性:Nickname  
  54.           
  55.         NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);  
  56.           
  57.         NSLog(@"Nickname:%@", tmpNickname);  
  58.           
  59.         [tmpNickname release];  
  60.           
  61.         //获取的联系人单一属性:Company name  
  62.           
  63.         NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);  
  64.           
  65.         NSLog(@"Company name:%@", tmpCompanyname);  
  66.           
  67.         [tmpCompanyname release];  
  68.           
  69.         //获取的联系人单一属性:Job Title  
  70.           
  71.         NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);  
  72.           
  73.         NSLog(@"Job Title:%@", tmpJobTitle);  
  74.           
  75.         [tmpJobTitle release];  
  76.           
  77.         //获取的联系人单一属性:Department name  
  78.           
  79.         NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);  
  80.           
  81.         NSLog(@"Department name:%@", tmpDepartmentName);  
  82.           
  83.         [tmpDepartmentName release];  
  84.           
  85.         //获取的联系人单一属性:Email(s)  
  86.           
  87.         ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);  
  88.           
  89.         for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)  
  90.               
  91.         {  
  92.               
  93.             NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);  
  94.               
  95.             NSLog(@"Emails%d:%@", j, tmpEmailIndex);  
  96.               
  97.             [tmpEmailIndex release];  
  98.               
  99.         }  
  100.           
  101.         CFRelease(tmpEmails);  
  102.           
  103.         //获取的联系人单一属性:Birthday  
  104.           
  105.         NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);  
  106.           
  107.         NSLog(@"Birthday:%@", tmpBirthday);  
  108.           
  109.         [tmpBirthday release];  
  110.           
  111.         //获取的联系人单一属性:Note  
  112.           
  113.         NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);  
  114.           
  115.         NSLog(@"Note:%@", tmpNote);  
  116.           
  117.         [tmpNote release];  
  118.           
  119.         //获取的联系人单一属性:Generic phone number  
  120.           
  121.         ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);  
  122.           
  123.         for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)  
  124.               
  125.         {  
  126.               
  127.             NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);  
  128.               
  129.             NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);  
  130.               
  131.             [tmpPhoneIndex release];  
  132.               
  133.         }  
  134.           
  135.         CFRelease(tmpPhones);  
  136.           
  137.     }  
  138.       
  139.     //释放内存   
  140.       
  141.     [tmpPeoples release];  
  142.       
  143.     CFRelease(tmpAddressBook);  
  144.       
  145. }  

解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。
以前
[plain] view plaincopy
  1. tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。  
[plain] view plaincopy
  1. 把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。  
[plain] view plaincopy
  1.   

备注:

苹果中文语言貌似有点问题。ios6.0  会提示你的app访问日历。。。。
然后网上查了下资料。可以参照微信访问通讯录的形式,给客户一个提示
他是在plist中  添加一项在XCode里显示的是Privacy - Contacts Usage Description。后面的string就是你要想提示的文字内容
Privacy - Location Usage Description”。这个是定位位置提示。其他类似。

备注二:

分享一个测试经验,也是从网上看到的。
一把苹果的app访问位置或者通讯录,第一次都会有一个提示让你选择。
但是第二次及以后,即时删掉,也不会再出现了。
如果想再次出现,可以  设置-通用-还原-还原位置与隐私
这样你再次点击你的app就会再次出现了。
版权声明:本文为博主原创文章,未经博主允许不得转载。

ios中访问通讯录数据

ios中访问通讯录数据
  • Mr_yong
  • Mr_yong
  • 2015年04月11日 14:48
  • 3330

关于iOS系统中通讯录的访问

在早些时候,当iOS 6还没出来,我们访问通讯录只要如下简单的代码: ABAddressBookRef addressBook = ABAddressBookCreate(); 不过在iOS ...
  • jasonblog
  • jasonblog
  • 2013年01月05日 06:36
  • 12790

关于IOS获取本地通讯录信息(包含iOS9.0前后)

在ios开发当中,获取用户本地的通讯录功能愈加频繁的出现,七两自己也在自己公司的项目当中遇到的获取本地的通讯录信息的功能(俗称“种子用户功能”,太可怕了)。对此七两总结了自己使用本地通讯录时的注意点,...
  • kenrry1992
  • kenrry1992
  • 2016年04月26日 17:55
  • 8482

关于iOS系统中通讯录的访问

在早些时候,当iOS 6还没出来,我们访问通讯录只要如下简单的代码: 不过在iOS 6上,这个API返回空值。苹果提供了如下API: // Call ABAddressBookCr...
  • jinglijun
  • jinglijun
  • 2013年05月10日 23:28
  • 1231

iOS7 iOS8 调用系统通讯录界面

#pragma mark--选取手机联系人 -(void)selectPeople{     //这个变量用于记录授权是否成功,即用户是否允许我们访问通讯录     int __block t...
  • wangkai598
  • wangkai598
  • 2015年06月23日 15:13
  • 1080

关于iOS的通讯录开发权限的说明笔记

由于接手同事的通讯录相关模块的开发工作,涉及到通讯录权限的确认,故笔记如下:(不涉及代码实现,仅对权限作说明记录) 如下表所示,iOS关于通讯录的开发有两种方式: 由于我们采用的是第一种方式【调...
  • wwmusic
  • wwmusic
  • 2016年12月29日 17:00
  • 1726

iOS相册、相机、通讯录权限获取

为什么要获取权限在越来越注重个人隐私的今天,用户很多情况下希望自己能完全掌握自己手机应用对媒体信息的一些访问权限,比如相册、相机、通讯录等。苹果在iOS7、iOS8等几个系统版本对一些权限的控制都做了...
  • andanlan
  • andanlan
  • 2016年07月31日 17:59
  • 4167

iOS访问通讯录开发-读取联系人信息

读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性。通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据。本案例...
  • tonny_guan
  • tonny_guan
  • 2013年07月01日 10:26
  • 16287

iOS 读取通讯录

iOS9之前#import // 先创建一个通讯录的对象。 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, ni...
  • czb1n
  • czb1n
  • 2016年01月14日 11:14
  • 855

iOS 获取系统通讯录的两种方法

今天看了很多获取通讯录的博客,大体就是分两大种、四小种,两大种分别是基于address框架和contacts框架开发的,四小种就是这两大种分别的有UI和无UI。 但是address框架在iOS9之后...
  • qcx321
  • qcx321
  • 2016年11月08日 09:34
  • 2510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS如何访问通讯录
举报原因:
原因补充:

(最多只允许输入30个字)