`
彡彡稻草
  • 浏览: 38900 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iphone通讯录AddressBook.framework和AddressBookUI.framework的应用

    博客分类:
  • IOS
阅读更多

通讯录联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。

1.AddressBookUI显示部分

AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:

ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息

ABPersonViewController:显示一个具体联系人的信息

ABNewPersonViewController:增加一个新的联系人

ABUnknownPersonViewController:完善一个联系人的信息

由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。

(a)创建并初始化一个ABPeoplePickerNavigationController对象

(b)设置其代理(delegate)

(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面

例子:


  1. - (IBAction)showPicker:(id)sender {  
  2.     ABPeoplePickerNavigationController *picker =  
  3.     [[ABPeoplePickerNavigationController alloc] init];  
  4.     picker.peoplePickerDelegate = self;  
  5.     [self presentModalViewController:picker animated:YES];  
  6.    [picker release];  

ABPeoplePickerNavigationControllerDelegate的方法介绍

(1)


  1. peoplePickerNavigationControllerDidCancel: 

当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。

(2)


  1. peoplePickerNavigationController:shouldContinueAfterSelectingPerson:  

当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。

(3)


  1. eoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:  

如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。

例子:


  1. - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {  
  2. // assigning control back to the main controller  
  3. [picker dismissModalViewControllerAnimated:YES];  
  4. }  
  5. - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker 
  6. shouldContinueAfterSelectingPerson:(ABRecordRef)person {  
  7. //获取联系人姓名  
  8. name.text = (NSString*)ABRecordCopyCompositeName(person);  
  9. //获取联系人电话  
  10. ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);  
  11. NSMutableArray *phones = [[NSMutableArray alloc] init];  
  12. int i;  
  13. for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {  
  14. NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];  
  15. NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];  
  16. NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);  
  17. if([aLabel isEqualToString:@"_$!<Mobile>!$_"])  
  18. {  
  19. [phones addObject:aPhone];  
  20. }  
  21. }  
  22. phoneNo.text=@"";  
  23. if([phones count]>0)  
  24. {  
  25. NSString *mobileNo = [phones objectAtIndex:0];  
  26. phoneNo.text = mobileNo;  
  27. //NSLog(mobileNo);  
  28. }  
  29. //获取联系人邮箱  
  30. ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);  
  31. NSMutableArray *emails = [[NSMutableArray alloc] init];  
  32. for (i = 0;i < ABMultiValueGetCount(emailMulti); i++)  
  33. {  
  34. NSString *emailAdress = [(NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease];  
  35. [emails addObject:emailAdress];  
  36. }  
  37. email.text=@"";  
  38. if([emails count]>0)  
  39. {  
  40. NSString *emailFirst=[emails objectAtIndex:0];  
  41. email.text = emailFirst;  
  42. //NSLog(emailFirst);  
  43. }  
  44. [peoplePicker dismissModalViewControllerAnimated:YES];  
  45. return NO;  
  46. }  
  47. - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker  
  48.  shouldContinueAfterSelectingPerson:(ABRecordRef)person  
  49. property:(ABPropertyID)property  
  50.   identifier:(ABMultiValueIdentifier)identifier{  
  51. return NO;  

2.AddressBook部分

AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。

通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。

(a)常用方法


  1. CFTypeRef ABRecordCopyValue (  
  2.    ABRecordRef record,  
  3.    ABPropertyID property  
  4. ); 

从一个记录中获取某个属性对应的值

(b)单值属性对应的方法


  1. CFStringRef ABRecordCopyCompositeName (  
  2.    ABRecordRef record  
  3. ); 

获取联系人完整的姓名。

(c)多值属性对应的方法


  1. CFTypeRef ABMultiValueCopyValueAtIndex (  
  2.    ABMultiValueRef multiValue,  
  3.    CFIndex index  
  4. ); 

返回对应位置处的属性值


  1. CFStringRef ABMultiValueCopyLabelAtIndex (  
  2.    ABMultiValueRef multiValue,  
  3.    CFIndex index  
  4. ); 

返回对应位置处的属性标识


  1. CFArrayRef ABMultiValueCopyArrayOfAllValues (  
  2.    ABMultiValueRef multiValue  
  3. ); 

返回包含所有属性值的数组


  1. CFIndex ABMultiValueGetCount (  
  2.    ABMultiValueRef multiValue  
  3. ); 

返回属性值的个数

例子:


  1. //获取联系人姓名  
  2. name.text = (NSString*)ABRecordCopyCompositeName(person);  
  3. //获取联系人电话  
  4. ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);  
  5. NSMutableArray *phones = [[NSMutableArray alloc] init];  
  6. int i;  
  7. for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {  
  8. NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];  
  9. NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];  
  10. NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);  
  11. if([aLabel isEqualToString:@"_$!<Mobile>!$_"])  
  12. {  
  13. [phones addObject:aPhone];  
  14. }  
分享到:
评论

相关推荐

    json_addressbook.zip

    标题“json_addressbook.zip”暗示了这个压缩包可能包含一个使用JSON格式存储联系人信息的示例。在AJAX场景中,这样的JSON文件可以被用来异步地更新网页上的通讯录信息,而无需刷新整个页面,从而提供更流畅的用户...

    jap网络通讯录addressBook

    《jap网络通讯录addressBook》是一款专为网络通信设计的高效管理工具,它整合了传统的通讯录功能并拓展到了互联网环境中,使用户能够轻松管理和分享自己的联系人信息。在这个数字化时代,有效的通信管理至关重要,而...

    java-addressbook.rar_java的Addressbook_通讯录web

    【标题】"java-addressbook.rar" 是一个基于Java技术开发的Web通讯录系统,名为"Java的Addressbook_通讯录Web"。这个项目的核心功能是实现对个人联系人的管理,包括添加、修改和删除等基本操作,这在日常工作中非常...

    RITLAddressBookDemo:通过AddressBook.framework简单获取联系人的各种属性

    通过AddressBook.framework简单获取联系人的各种属性 AddressBook是Apple提供给我们获取系统联系人的一个很方便类库,与其说方便,其实刚开始还是比较崩溃的,从开发文档来看,它还是偏向于C语言,并且不在ARC的控制...

    ios-获取通讯录列表.zip

    综上所述,"ios-获取通讯录列表.zip"中的"LXAddressBookDemo"项目提供了一个实际的例子,展示了如何在iOS应用中请求通讯录权限和获取联系人列表。通过学习和理解这段代码,开发者可以更好地掌握iOS中的联系人管理...

    ContactsFetcher:ContactsFetcher 是 AddressBook.framework 的包装器,可以轻松访问本机地址簿而不会头疼

    ContactsFetcher,正如其名,是一个专为简化这一过程而设计的Objective-C库,它作为AddressBook.framework的封装器,使得开发者能够更便捷、更直观地与系统地址簿进行交互,无需深陷于复杂的框架细节之中。...

    通讯录.zip 内含exe,还有代码。

    addressBook.erase(remove_if(addressBook.begin(), addressBook.end(), [&](const Contact& c) { return c.name == name; }), addressBook.end()); } ``` 查找联系人通常涉及搜索容器以找到具有特定属性的联系...

    addressBook网上通讯录

    网上通讯录 addressBook网上通讯录 addressBook网上通讯录 addressBook网上通讯录 addressBook网上通讯录 addressBook网上通讯录 addressBook

    addressbook

    在这个addressbook项目中,Struts负责控制应用程序的流程,处理用户的请求,协调模型、视图和控制器之间的交互。Struts通过Action类和配置文件(struts-config.xml)来定义请求的处理逻辑,实现业务逻辑与表现层的...

    AddressBook.swift

    AddressBook.swift

    北大青鸟 Y2项目实战——通讯录.rar

    在这个压缩包中,有两个关键文件:`在线通讯录效果.ppt`和`addressBook`。 `在线通讯录效果.ppt`可能是一个演示文稿,详细介绍了通讯录项目的界面设计、功能模块以及实际操作的效果。在PPT中,我们通常会看到项目的...

    Ajax-Project-AJAX-AddressBook.zip

    Ajax-Project-AJAX-AddressBook.zip,用php与jquery和ajax一起编写的单页应用程序(spa),ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中...

    AddressBook.rar

    在这个“AddressBook.rar”压缩包中,包含了一个仿照微信通讯录功能的实现,它分别使用了两种常见的Android UI组件:ListView和RecyclerView。这两个组件都是用来展示列表数据,但它们在性能和灵活性上有所区别。 ...

    iOS通讯录访问操作封装,全部封装为objective-c对象,不用再使用底层的C语言操作通讯录了.zip

    在iOS开发中,访问和操作通讯录是一项常见的需求。然而,苹果提供的原生API是基于C语言的,对于开发者来说,使用起来可能会有些复杂。这个压缩包“iOS通讯录访问操作封装,全部封装为objective-c对象,不用再使用...

    嵌入式Linux 下的Qt通讯簿程序设计.pdf

    Qt是一个跨平台的C++应用程序框架,它提供了一整套的库和工具,使得开发者可以方便地创建具有图形用户界面的应用程序。在嵌入式Linux系统中,Qt的应用非常广泛,尤其是因为它支持多种硬件平台,并且拥有良好的图形...

    AddressBook.dat

    AddressBook.dat

    AddressBook.h

    AddressBook.h

    AddressBook.exe

    AddressBook.exe

    d029_addressbook.zip_数据库程序

    【标题】"d029_addressbook.zip_数据库程序"是一个入门级的数据库应用程序,它包含了一些基本功能,如添加新记录和搜索已有记录。这个压缩包中的文件为我们揭示了程序的核心组成部分,让我们来深入了解一下其中涉及...

    AddressBook.zip

    在信息技术领域,Java语言因其跨平台性和强大的功能,被广泛应用于各种系统开发,包括我们今天要讨论的通讯录管理系统。本资源“AddressBook.zip”正是一个面向广大学子的课设项目,它包含了完整的源代码、数据库...

Global site tag (gtag.js) - Google Analytics