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访问通讯录

可参考:http://blog.csdn.net/tonny_guan/article/details/9211797 很多app需要在访问手机中的通讯录,参考了一些文章,希望给大家带来帮助。 ...

iOS 访问通讯录

1.要加两个框架 2.要判断一下通讯录是否可以访问 @interface WFTViewController () @property (nonatomic, assign) ABAddr...

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

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

不同iOS系统版本下ABPeoplePickerNavigationController和ABAddressBook访问系统通讯录的区别

iOS下访问系统通讯录及ios8下的bug问题
  • huge9
  • huge9
  • 2015-05-22 15:55
  • 336

iOS 通讯录访问(一)

Apple把通讯录存放在SQLite 3中,但是应用之间不能直接访问,也就是说我们自己编写的应用不能采用数据持久化技术直接访问通讯录数据库。为了实现通讯录数据库的访问,Apple开放了一些专门的API...

Swift iOS 9通讯录访问

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 前言:在iOS 9之前,一直使用Ad...

iOS 通讯录访问(二)

未完待续。。。

iOS开发之如何访问通讯录

//读取所有联系人 -(void)ReadAllPeoples {          //取得本地通信录名柄          ABAddressBookRef tmpAddressBook ...

iOS9 访问通讯录

iOS软件开发中难免有获取通讯录的联系人以及发短信给联系人的需求。在此简单的分享下 工具/原料 Mac OS X操作系统 Xcode编译器 方法...

ios6 ios7 访问和使用系统通讯录权限

ios6 ios7 访问和使用系统通讯录 导入AddressBook和AddressBookUI框架 iOS 6之前,可以通过如下方法获得通讯录  ABAddressBookRef ad...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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