首先導入頭文件
#import <AddressBook/AddressBook.h>
獲取權限 讀取通訊錄
- (void)loadPerson { ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error){ CFErrorRef *error1 = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error1); [self copyAddressBook:addressBook]; }); } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized){ CFErrorRef *error = NULL; ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); [self copyAddressBook:addressBook]; } else { dispatch_async(dispatch_get_main_queue(), ^{ // 用戶不給權限 }); } }
獲取每個聯系人的信息 可以用模型存儲起來
- (void)copyAddressBook:(ABAddressBookRef)addressBook { CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook); for ( int i = 0; i < numberOfPeople; i++){ ABRecordRef person = CFArrayGetValueAtIndex(people, i); NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); //讀取middlename NSString *middlename = (__bridge NSString*)ABRecordCopyValue(person, kABPersonMiddleNameProperty); NSLog(@"%@",middlename); //讀取prefix前綴 NSString *prefix = (__bridge NSString*)ABRecordCopyValue(person, kABPersonPrefixProperty); //讀取suffix后綴 NSString *suffix = (__bridge NSString*)ABRecordCopyValue(person, kABPersonSuffixProperty); //讀取nickname呢稱 NSString *nickname = (__bridge NSString*)ABRecordCopyValue(person, kABPersonNicknameProperty); NSLog(@"%@",nickname); //讀取firstname拼音音標 NSString *firstnamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNamePhoneticProperty); //讀取lastname拼音音標 NSString *lastnamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonLastNamePhoneticProperty); //讀取middlename拼音音標 NSString *middlenamePhonetic = (__bridge NSString*)ABRecordCopyValue(person, kABPersonMiddleNamePhoneticProperty); // NSLog(@"%@",middlenamePhonetic) //讀取organization公司 NSString *organization = (__bridge NSString*)ABRecordCopyValue(person, kABPersonOrganizationProperty); //讀取jobtitle工作 NSString *jobtitle = (__bridge NSString*)ABRecordCopyValue(person, kABPersonJobTitleProperty); //讀取department部門 NSString *department = (__bridge NSString*)ABRecordCopyValue(person, kABPersonDepartmentProperty); //讀取birthday生日 NSDate *birthday = (__bridge NSDate*)ABRecordCopyValue(person, kABPersonBirthdayProperty); //讀取note備忘錄 NSString *note = (__bridge NSString*)ABRecordCopyValue(person, kABPersonNoteProperty); //第一次添加該條記錄的時間 NSString *firstknow = (__bridge NSString*)ABRecordCopyValue(person, kABPersonCreationDateProperty); NSLog(@"第一次添加該條記錄的時間%@\n",firstknow); //最后一次修改該條記錄的時間 NSString *lastknow = (__bridge NSString*)ABRecordCopyValue(person, kABPersonModificationDateProperty); NSLog(@"最后一次修改該條記錄的時間%@\n",lastknow); //獲取email多值 ABMultiValueRef email = ABRecordCopyValue(person, kABPersonEmailProperty); int emailcount = ABMultiValueGetCount(email); for (int x = 0; x < emailcount; x++) { //獲取email Label NSString* emailLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(email, x)); //獲取email值 NSString* emailContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(email, x); } //讀取地址多值 ABMultiValueRef address = ABRecordCopyValue(person, kABPersonAddressProperty); int count = ABMultiValueGetCount(address); for(int j = 0; j < count; j++) { //獲取地址Label NSString* addressLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(address, j); //獲取該label下的地址6屬性 NSDictionary* personaddress =(__bridge 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 y = 0; y < datescount; y++) { //獲取dates Label NSString* datesLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(dates, y)); //獲取dates值 NSString* datesContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(dates, y); } //獲取kind值 CFNumberRef recordType = ABRecordCopyValue(person, kABPersonKindProperty); if (recordType == kABPersonKindOrganization) { // it's a company NSLog(@"it's a company\n"); } else { // it's a person, resource, or room NSLog(@"it's a person, resource, or room\n"); } //獲取IM多值 ABMultiValueRef instantMessage = ABRecordCopyValue(person, kABPersonInstantMessageProperty); for (int l = 1; l < ABMultiValueGetCount(instantMessage); l++) { //獲取IM Label NSString* instantMessageLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(instantMessage, l); //獲取該label下的2屬性 NSDictionary* instantMessageContent =(__bridge NSDictionary*) ABMultiValueCopyValueAtIndex(instantMessage, l); NSString* username = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageUsernameKey]; NSString* service = [instantMessageContent valueForKey:(NSString *)kABPersonInstantMessageServiceKey]; } //讀取電話多值 ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty); for (int k = 0; k<ABMultiValueGetCount(phone); k++) { //獲取電話Label NSString * personPhoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, k)); //獲取該Label下的電話值 NSString * personPhone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phone, k); NSLog(@"%@",personPhone); } //獲取URL多值 ABMultiValueRef url = ABRecordCopyValue(person, kABPersonURLProperty); for (int m = 0; m < ABMultiValueGetCount(url); m++) { //獲取電話Label NSString * urlLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(url, m)); //獲取該Label下的電話值 NSString * urlContent = (__bridge NSString*)ABMultiValueCopyValueAtIndex(url,m); NSLog(@"%@",urlContent); } //讀取照片 NSData *image = (__bridge NSData*)ABPersonCopyImageData(person); } }
ok 關鍵大家要注意
Release
