首页 > 代码库 > iOS 获取通讯录
iOS 获取通讯录
1.添加 AddressBook库
- (IBAction)add:(id)sender {
ABAddressBookRequestAccessWithCompletion(ABAddressBookRef addressBookRef, ^(bool granted,CFErrorRef error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
NSArray * array=[selfgetContactsFromAddressBook];
});
}else {
// TODO: Show alert
}
});
}
-(NSMutableArray *)getContactsFromAddressBook
{
CFErrorRef error = NULL;
NSMutableArray * contacts = [[NSMutableArrayalloc]init];
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (addressBook) {
NSArray *allContacts = (__bridge_transferNSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *mutableContacts = [NSMutableArrayarrayWithCapacity:allContacts.count];
NSUInteger i = 0;
for (i = 0; i<[allContactscount]; i++)
{
//THContact 一个model对象,有name和phoneNum两个属性
THContact *contact = [[THContactalloc] init];
ABRecordRef contactPerson = (__bridgeABRecordRef)allContacts[i];
contact.recordId =ABRecordGetRecordID(contactPerson);
// Get first and last names
NSString *firstName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonFirstNameProperty);
NSString *lastName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonLastNameProperty);
NSString * midName = (__bridge_transferNSString*)ABRecordCopyValue(contactPerson,kABPersonMiddleNameProperty);
// Set Contact properties
contact.firstName = firstName;
contact.lastName = lastName;
contact.middleName = midName;
// Get mobile number
ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);
contact.phone = [selfgetMobilePhoneProperty:phonesRef];
if(phonesRef) {
CFRelease(phonesRef);
}
if (contact.phone.count >0) {
[mutableContactsaddObject:contact];
}
}
if(addressBook) {
CFRelease(addressBook);
}
contacts = [NSMutableArrayarrayWithArray:mutableContacts];
return contacts;
}
else
{
NSLog(@"Error");
}
return nil;
}
- (NSMutableArray *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef
{
NSMutableArray * array = [NSMutableArrayarray];
for (int k =0; k<ABMultiValueGetCount(phonesRef); k++)
{
//获取电话Label
// NSString * personPhoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phonesRef, k));
//获取該Label下的电话值
NSString * personPhone = (__bridgeNSString*)ABMultiValueCopyValueAtIndex(phonesRef, k);
if (personPhone) {
[arrayaddObject:personPhone];
}
}
return array;
}
iOS 获取通讯录