IOS开发 手机联系人获取与使用ABAddressBookRef
来源:互联网 发布:莆田耐克高仿鞋淘宝店 编辑:程序博客网 时间:2024/05/29 09:43
IOS提供了直接获取手机联系人信息的API,我们需要导入该包addressbook.framework;此包并没有包含在corefoundation.framework里;
而我们通常使用的是Foundation库,这辆个库的区别就是CoreFoundation库是一个C框架,但是这两个库里的内容是可以简单的进行转换的,
比如:CFString cstr = (CFString)@"NSStringTest";NSDate *date = (NSDate *)cfdate;CoreFoundation里也有类似retain和release的方法,CFRetain和CFRelease。
首先介绍几个类:
1:ABAddressBookRef:ABAddressBookRef像一个管理员,使用过Sqlite的朋友都知道Sqlite3对象的作用,可以说ABAddressBookRef实例的作用和sqlite3的实例的性质一样,都类似一个管理者,来管理这个通讯录,并给你提供一个访问通讯录的通道,并执行保存操作。初始化一个ABAddressBookRef的实例ABAddressBookCreate( )。
2:ABRecordRef:记录。一个属性的集合。类似通讯录中一个个的人,它包含这个人的所有属性,比如First and Last name,图片信息,电话号码,邮箱等等。初始化一个ABRecordRef的方法就是:ABRecordRef person = ABPersonCreate();
我们需要的信息主要包含在下面这2个类种:
1:ABPerson 联系人信息,包含姓名,电话号码,地址信息,照片等
2:ABGroup 联系人分组信息,包含组名,数量等
最后说明:
1:返回值使用CoreFoundation是一样的:可以认为CFString*=NSString,CFArray*=NSArray,ABMultiValueRef*=Dictionary,CFError*=NSError等等,这些都可以互相转换
2:返回联系人属性分为两种:一种是拥有唯一值的属性比如姓名,生日,性别等一般用CFString返回,一种是多值属性比如电话号码,地址等一般用ABMultiValue*等返回。
3:常使用的方法和宏:
ABRecordRef record=CFArrayGetValueAtIndex(CFArr,0);实际上和NSArr类似;
ABMultiValueRef mulitValue=ABRecordCopyValue(record,kABPersonPhoneProperty);获取电话号码,可能回多个;
像上面kABPersonPhoneProperty这种宏有许多,可以用来取名kABPersonFirstNameProper
常用情景:
ABAddressBookRef address=ABAddressBookCreate();//读取手机通讯录 CFArrayRef allperson =ABAddressBookCopyArrayOfAllPeople(addressBook);//取全部联系人 NSArray * persons=(NSArray*)ABAddressBookCopyPeopleWithName(address,CFStringRef);//取指定姓名的联系人一:添加联系人
ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();//初始化 ABRecordRef newPerson = ABPersonCreate(); CFErrorRef error = NULL; ABRecordSetValue(newPerson, kABPersonFirstNameProperty, firsrName, &error);//以下几行设置用户基本属性,姓名,公司 ABRecordSetValue(newPerson, kABPersonLastNameProperty, lastName, &error); ABRecordSetValue(newPerson, kABPersonOrganizationProperty, organization, &error); ABRecordSetValue(newPerson, kABPersonFirstNamePhoneticProperty, firstNamePhonetic, &error); ABRecordSetValue(newPerson, kABPersonLastNamePhoneticProperty, lastNamePhonetic, &error); ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);//号码可以是多个,用了多值属性 ABMultiValueAddValueAndLabel(multiPhone, homeFAX, kABPersonPhoneHomeFAXLabel, NULL); ABMultiValueAddValueAndLabel(multiPhone, mobile, kABPersonPhoneMobileLabel, NULL); ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone, &error); CFRelease(multiPhone); ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);//邮件可以是多个,用了多值属性 ABMultiValueAddValueAndLabel(multiEmail, email, kABWorkLabel, NULL); ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error); CFRelease(multiEmail); NSData *dataRef = UIImagePNGRepresentation(headImage);//设置头像 ABPersonSetImageData(newPerson, (CFDataRef)dataRef, &error); ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error); ABAddressBookSave(iPhoneAddressBook, &error); CFRelease(newPerson); CFRelease(iPhoneAddressBook);二:删除联系人
CFErrorRef error = NULL; ABRecordRef deletedPeople = ABAddressBookGetPersonWithRecordID(addressBook, recordID); if (deletedPeople) { ABAddressBookRemoveRecord(addressBook, deletedPeople, &error); ABAddressBookSave(addressBook, &error); }三:获取分组信息
CFArrayRef array = ABAddressBookCopyArrayOfAllGroups(address); for (id group in (NSArray *)array) { NSLog(@"group name = %@", ABRecordCopyValue(group, kABGroupNameProperty)); NSLog(@"group id = %d", ABRecordGetRecordID(group)); }四:删除分组信息
ABRecordRef deletedGroup = ABAddressBookGetGroupWithRecordID(address, RecordID); ABAddressBookRemoveRecord(address, deletedGroup, nil); ABAddressBookSave(address, nil);五:添加分组信息
ABRecordRef newGroup = ABGroupCreate(); ABRecordSetValue(newGroup, kABGroupNameProperty, groupName, nil); ABAddressBookAddRecord(address, newGroup, nil); ABAddressBookSave(address, nil);六:常用基本属性
CFArrayRef allperson =ABAddressBookCopyArrayOfAllPeople(addressBook); for (id person in (__bridge NSArray *)allperson) { ABMultiValueRef cfphone = ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonPhoneProperty); //获取firstname NSString *personName = (NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty); //获取lastname kABPersonLastNameProperty //获取middlename kABPersonMiddleNameProperty //获取前缀 kABPersonPrefixProperty //获取后缀 kABPersonSuffixProperty //获取昵称 kABPersonNicknameProperty //获取firstname拼音音标 kABPersonFirstNamePhoneticProperty //获取lastname拼音音标 kABPersonLastNamePhoneticProperty //获取middlename拼音音标 kABPersonMiddleNamePhoneticProperty //获取organization公司 kABPersonOrganizationProperty //获取jobtitle工作 kABPersonJobTitleProperty //获取department部门 kABPersonDepartmentProperty //获取birthday生日 kABPersonBirthdayProperty //获取note备忘录 kABPersonNoteProperty //第一次添加该条记录的时间 kABPersonCreationDateProperty //最后一次修改該条记录的时间 kABPersonModificationDateProperty //获取照片 NSData *image = (NSData*)ABPersonCopyImageData(person); UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(200, 0, 50, 50)]; [myImage setImage:[UIImage imageWithData:image]]; //==================以下是多值获取========================= //获取email多值 ABMultiValueRef email = ABRecordCopyValue(person, kABPersonEmailProperty); int emailcount = ABMultiValueGetCount(email); for (int i = 0; i < emailcount; i++) { //获取email类型 Label NSString* emailLabel = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(email, i)); //获取email值 NSString* emailContent = (NSString*)ABMultiValueCopyValueAtIndex(email, i); } //获取地址多值 ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty); int count = ABMultiValueGetCount(address); for(int j = 0; j < count; j++) { //获取地址类型Label NSString* addressLabel = (NSString*)ABMultiValueCopyLabelAtIndex(address, j); //获取該label下的地址6属性 NSDictionary* personaddress =(NSDictionary*) ABMultiValueCopyValueAtIndex(address, j); NSString* country = [personaddress valueForKey:(NSString *)kABPersonAddressCountryKey]; NSString* city = [personaddress valueForKey:(NSString *)kABPersonAddressCityKey]; NSString* state = [personaddress valueForKey:(NSString *)kABPersonAddressStateKey]; NSString* street = [personaddress valueForKey:(NSString *)kABPersonAddressStreetKey]; NSString* zip = [personaddress valueForKey:(NSString *)kABPersonAddressZIPKey]; NSString* coutntrycode = [personaddress valueForKey:(NSString *)kABPersonAddressCountryCodeKey]; } //获取dates多值 ABMultiValueRef dates = ABRecordCopyValue(person, kABPersonDateProperty); int datescount = ABMultiValueGetCount(dates); for (int k = 0; k < datescount; k++) { //获取dates Label NSString* datesLabel = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(dates, k)); //获取dates值 NSString* datesContent = (NSString*)ABMultiValueCopyValueAtIndex(dates, k); } //获取kind值 CFNumberRef recordType = ABRecordCopyValue(person, kABPersonKindProperty); if (recordType == kABPersonKindOrganization) { // it's a company } else { // it's a person, resource, or room } //获取IM多值 ABMultiValueRef instantMessage = ABRecordCopyValue(person, kABPersonInstantMessageProperty); for (int l = 1; l < ABMultiValueGetCount(instantMessage); l++) { //获取IM类型 Label NSString* instantMessageLabel = (NSString*)ABMultiValueCopyLabelAtIndex(instantMessage, l); //获取該label下的2属性 NSDictionary* instantMessageContent =(NSDictionary*) ABMultiValueCopyValueAtIndex(instantMessage, l); NSString* username = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageUsernameKey]; NSString* service = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageServiceKey]; } //获取电话多值 ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty); for (int m = 0; m<ABMultiValueGetCount(phone); m++) { //获取电话Label类型 NSString * personPhoneLabel = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, m)); //获取該Label下的电话值 NSString * personPhone = (NSString*)ABMultiValueCopyValueAtIndex(phone, m); } //获取URL多值 ABMultiValueRef url = ABRecordCopyValue(person, kABPersonURLProperty); for (int n = 0; n < ABMultiValueGetCount(url); n++) { //获取电话Label NSString * urlLabel = (NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(url, n)); //获取該Label下的电话值 NSString * urlContent = (NSString*)ABMultiValueCopyValueAtIndex(url,n); } }
- IOS开发 手机联系人获取与使用ABAddressBookRef
- IOS开发 手机联系人获取与使用ABAddressBookRef
- IOS开发 手机联系人获取与使用ABAddressBookRef
- iOS开发之获取手机通讯录联系人信息<二>
- iOS开发之获取手机通讯录联系人信息<一>
- iOS 获取手机通讯录的联系人
- android开发——获取手机联系人
- CursorAdapter的使用:获取手机联系人
- Android 使用AsyncTaskLoader获取手机联系人
- android 使用内容提供者获取手机联系人
- android 使用内容提供者获取手机联系人
- ios开发之获取手机通讯录中所有联系人的信息二
- iOS开发------获取系统联系人(AddressBook篇)
- iOS开发------获取系统联系人(Contacts篇)
- iOS开发:通讯录联系人获取相关
- 获取手机联系人
- Android获取手机联系人
- 获取手机联系人
- go语言常见缺陷与陷阱一(defer)
- DWR与Spring MVC 集成
- 执行exe文件
- 基于VC++的USB2.0接口通信程序设计
- 60行代码俄罗斯方块
- IOS开发 手机联系人获取与使用ABAddressBookRef
- 平衡二叉树
- 结构体对齐的具体含义(#pragma pack)
- 安装Bioconductor中的包
- 【Android开发】线程间通讯机制(提高篇)——深入浅出实现原理
- CE6编译出错error C2220: warning treated as error - no 'object' file generated
- 自己写的缓存类,备份
- Eclipse结合gdbserver远程调试
- 无法播音原因总结