iOS开发中使app获取本机通讯录的实现代码实例
一、在工程中添加AddressBook.framework和AddressBookUI.framework
二、获取通讯录
1、在infterface中定义数组并在init方法中初始化
NSMutableArray*addressBookTemp; -(id)initWithNibName:(NSString*)nibNameOrNilbundle:(NSBundle*)nibBundleOrNil { addressBookTemp=[NSMutableArrayarray]; }
2、定义一个model,用来存放通讯录中的各个属性
新建一个继承自NSObject的类,在.h中
@interfaceTKAddressBook:NSObject{ NSIntegersectionNumber; NSIntegerrecordID; NSString*name; NSString*email; NSString*tel; } @propertyNSIntegersectionNumber; @propertyNSIntegerrecordID; @property(nonatomic,retain)NSString*name; @property(nonatomic,retain)NSString*email; @property(nonatomic,retain)NSString*tel; @end
在.m文件中进行synthesize
@implementationTKAddressBook @synthesizename,email,tel,recordID,sectionNumber; @end
3、获取联系人
在iOS6之后,获取通讯录需要获得权限
//新建一个通讯录类 ABAddressBookRefaddressBooks=nil; if([[UIDevicecurrentDevice].systemVersionfloatValue]>=6.0) { addressBooks= ABAddressBookCreateWithOptions(NULL,NULL); //获取通讯录权限 dispatch_semaphore_tsema=dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(addressBooks,^(boolgranted,CFErrorReferror){dispatch_semaphore_signal(sema);}); dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER); dispatch_release(sema); } else { addressBooks=ABAddressBookCreate(); } //获取通讯录中的所有人 CFArrayRefallPeople=ABAddressBookCopyArrayOfAllPeople(addressBooks);
//通讯录中人数 CFIndexnPeople=ABAddressBookGetPersonCount(addressBooks); //循环,获取每个人的个人信息 for(NSIntegeri=0;i<nPeople;i++) { //新建一个addressBookmodel类 TKAddressBook*addressBook=[[TKAddressBookalloc]init]; //获取个人 ABRecordRefperson=CFArrayGetValueAtIndex(allPeople,i); //获取个人名字 CFTypeRefabName=ABRecordCopyValue(person,kABPersonFirstNameProperty); CFTypeRefabLastName=ABRecordCopyValue(person,kABPersonLastNameProperty); CFStringRefabFullName=ABRecordCopyCompositeName(person); NSString*nameString=(__bridgeNSString*)abName; NSString*lastNameString=(__bridgeNSString*)abLastName; if((__bridgeid)abFullName!=nil){ nameString=(__bridgeNSString*)abFullName; }else{ if((__bridgeid)abLastName!=nil) { nameString=[NSStringstringWithFormat:@"%@%@",nameString,lastNameString]; } } addressBook.name=nameString; addressBook.recordID=(int)ABRecordGetRecordID(person);; ABPropertyIDmultiProperties[]={ kABPersonPhoneProperty, kABPersonEmailProperty }; NSIntegermultiPropertiesTotal=sizeof(multiProperties)/sizeof(ABPropertyID); for(NSIntegerj=0;j<multiPropertiesTotal;j++){ ABPropertyIDproperty=multiProperties[j]; ABMultiValueRefvaluesRef=ABRecordCopyValue(person,property); NSIntegervaluesCount=0; if(valuesRef!=nil)valuesCount=ABMultiValueGetCount(valuesRef); if(valuesCount==0){ CFRelease(valuesRef); continue; } //获取电话号码和email for(NSIntegerk=0;k<valuesCount;k++){ CFTypeRefvalue=ABMultiValueCopyValueAtIndex(valuesRef,k); switch(j){ case0:{//Phonenumber addressBook.tel=(__bridgeNSString*)value; break; } case1:{//Email addressBook.email=(__bridgeNSString*)value; break; } } CFRelease(value); } CFRelease(valuesRef); } //将个人信息添加到数组中,循环完成后addressBookTemp中包含所有联系人的信息 [addressBookTempaddObject:addressBook]; if(abName)CFRelease(abName); if(abLastName)CFRelease(abLastName); if(abFullName)CFRelease(abFullName); }