要访问通讯录,可以使用 AddressBook.framework 框架:
#import <AddressBook/AddressBook.h>
1、授权,建议写在 application: didFinishLaunchingWithOptions: 方法中:
// 创建一个通讯录实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 请求通讯录授权
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted) {
NSLog(@"允许访问");
} else {
NSLog(@"不允许访问");
}
});
CFRelease(addressBook);
// 创建一个通讯录实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 获得所有联系人数据
NSArray *peopleArray = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
NSInteger peopleCount = peopleArray.count;
for (int i = 0; i < peopleCount; i++) {
ABRecordRef people = (__bridge ABRecordRef)(peopleArray[i]);
NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));
NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));
NSLog(@"%@ %@", firstName, lastName);
// 获取联系人电话
ABMultiValueRef phone = ABRecordCopyValue(people, kABPersonPhoneProperty);
CFIndex phoneCount = ABMultiValueGetCount(phone);
for (int j = 0; j < phoneCount; j++) {
NSString *phoneLabel = (__bridge NSString *)(ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, j)));
NSString *phoneValue = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(phone, j));
NSLog(@"%@:%@", phoneLabel, phoneValue);
}
// 可以使用 ABPersonCopyImageData 获取头像
CFRelease(phone);
}
CFRelease(addressBook);
// 创建一个通讯录实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 获得所有联系人数据
NSArray *peopleArray = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
// 拿到通讯录第一个联系人
ABRecordRef people = (__bridge ABRecordRef)(peopleArray[0]);
ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(phone, @"18511112222", kABPersonPhoneMobileLabel, NULL);
// 修改手机号
ABRecordSetValue(people, kABPersonPhoneProperty, phone, NULL);
// 保存
ABAddressBookSave(addressBook, NULL);
CFRelease(addressBook);
4、添加联系人:
// 创建一个通讯录实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 创建联系人
ABRecordRef person = ABPersonCreate();
// 设置联系人属性
ABRecordSetValue(person, kABPersonFirstNameProperty, @"三", NULL);
ABRecordSetValue(person, kABPersonLastNameProperty, @"张", NULL);
ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(phone, @"18711112222", kABPersonPhoneMobileLabel, NULL);
ABRecordSetValue(person, kABPersonPhoneProperty, phone, NULL);
// 设置头像
UIImage *image = [UIImage imageNamed:@"user_default"];
NSData *imageData = UIImagePNGRepresentation(image);
ABPersonSetImageData(person, (__bridge CFDataRef)(imageData), NULL);
// 添加联系人到通讯录并保存
ABAddressBookAddRecord(addressBook, person, NULL);
ABAddressBookSave(addressBook, NULL);
CFRelease(phone);
CFRelease(person);
CFRelease(addressBook);
5、删除联系人:
// 创建一个通讯录实例
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
// 获得所有联系人数据
NSArray *peopleArray = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
// 拿到通讯录最后一个联系人
ABRecordRef people = (__bridge ABRecordRef)(peopleArray.lastObject);
// 删除联系人
ABAddressBookRemoveRecord(addressBook, people, NULL);
ABAddressBookSave(addressBook, NULL);
CFRelease(addressBook);