获取本地通讯录
来源:互联网 发布:做淘宝虚拟充值代理 编辑:程序博客网 时间:2024/06/06 02:34
一.基本知识
和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。
二.具体介绍
1.AddressBookUI显示部分
AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:
ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息
ABPersonViewController:显示一个具体联系人的信息
ABNewPersonViewController:增加一个新的联系人
ABUnknownPersonViewController:完善一个联系人的信息
由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。
(a)创建并初始化一个ABPeoplePickerNavigationController对象
(b)设置其代理(delegate)
(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面
例子:
- (IBAction)showPicker:(id)sender { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentModalViewController:picker animated:YES]; [picker release];}
ABPeoplePickerNavigationControllerDelegate的方法介绍
(a)peoplePickerNavigationControllerDidCancel:当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。
(b)peoplePickerNavigationController:shouldContinueAfterSelectingPerson: 当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。
(c)peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier: 如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果 希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。
例子:
(a)示例:
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { // assigning control back to the main controller [picker dismissModalViewControllerAnimated:YES];}
(b)示例:
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
//获取联系人姓名
name.text = (NSString*)ABRecordCopyCompositeName(person);
//获取联系人电话
ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSMutableArray *phones = [[NSMutableArray alloc] init];
int i;
for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) { NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease]; NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease]; NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone); if([aLabel isEqualToString:@"_$!<Mobile>!$_"]) { [phones addObject:aPhone]; } }phoneNo.text=@"";if([phones count]>0){ NSString *mobileNo = [phones objectAtIndex:0]; phoneNo.text = mobileNo; //NSLog(mobileNo);}//获取联系人邮箱
ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);NSMutableArray *emails = [[NSMutableArray alloc] init];for (i = 0;i < ABMultiValueGetCount(emailMulti); i++){ NSString *emailAdress = [(NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease]; [emails addObject:emailAdress];}email.text=@"";if([emails count]>0){ NSString *emailFirst=[emails objectAtIndex:0]; email.text = emailFirst; //NSLog(emailFirst);}[peoplePicker dismissModalViewControllerAnimated:YES];return NO;}
(c)示例
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{ return NO;}
2.AddressBook部分
AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。
通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。
(a)常用方法
CFTypeRef ABRecordCopyValue (
ABRecordRef record,
ABPropertyID property
);
从一个记录中获取某个属性对应的值
(b)单值属性对应的方法
CFStringRef ABRecordCopyCompositeName (
ABRecordRef record
);
获取联系人完整的姓名。
(c)多值属性对应的方法
CFTypeRef ABMultiValueCopyValueAtIndex (
ABMultiValueRef multiValue,
CFIndex index
);
返回对应位置处的属性值
CFStringRef ABMultiValueCopyLabelAtIndex (
ABMultiValueRef multiValue,
CFIndex index
);
返回对应位置处的属性标识
CFArrayRef ABMultiValueCopyArrayOfAllValues (
ABMultiValueRef multiValue
);
返回包含所有属性值的数组
CFIndex ABMultiValueGetCount (
ABMultiValueRef multiValue
);
- 获取本地通讯录
- 获取本地通讯录--ContentResolver
- iOS开发获取本地通讯录
- 获取本地通讯录的所有联系人的信息
- Android获取本地通讯录发生变化的联系人
- iOS中获取本地通讯录联系人以及汉字首字母排序
- 获取通讯录
- 获取通讯录
- 获取通讯录
- 获取通讯录
- 获取通讯录
- 获取通讯录
- 获取通讯录
- iOS调用本地通讯录
- Android本地通讯录
- cordvoa 调取本地通讯录
- 关于IOS获取本地通讯录信息(包含iOS9.0前后)
- 关于IOS获取本地通讯录信息(包含iOS9.0前后)
- 修改已经提交的commit 的msg
- ListView中Item无法获取点击事件的解决方案
- Errors running builder 'JavaScript Validator' on project 'myKendoUI'. assertion failed: Marker prope
- 7. 包、接口 java
- android_String对象
- 获取本地通讯录
- 每日一练------小球反弹一半问题
- php--得到我们开始使用php前的一些参数:变量 / 常量 / 模块 / 函数 / 类
- ArcEngine三维开发实现3D符号以现实单位显示
- android_Android操作系统的内存回收机制
- 中国人为何宁花4000元买手机,不花6元买游戏
- 2-sat(tarjan算法)hdu(1824)
- Ubuntu 备份还原那些事儿
- Java HashMap的工作原理