在iOS上的地址簿中获取图像联系人

我是新的使用通讯簿,我会尝试获取手机中的联系人的一些信息。 是否有可能获得所有联系人的图像联系人? 这将适用于iOS4或更高版本。

提前致谢!

是的,这是完全可能的,你只需要询问每个人的logging是否有图像:

请参阅文档: http : //developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html#//apple_ref/doc/uid/TP40007210

相关function:

ABPersonHasImageData(person) ABPersonCopyImageDataWithFormat(person) 

ABPersonCopyImageDataWithFormat返回一个CFDataRef。 使用此(ARC) NSData* data = (__bridge_transfer NSData*) cfData;将其转换为NSData NSData* data = (__bridge_transfer NSData*) cfData;

然后可以使用[UIImage imageWithData:data]创build图像

这是非常好的代码,我发现select所有的联系信息,并可能有助于未来的用户..

在项目中添加AddressBookUI和AddressBook框架

.h文件中

 #import <UIKit/UIKit.h> #import <AddressBookUI/AddressBookUI.h> @interface ViewController : UIViewController<ABPeoplePickerNavigationControllerDelegate,UIAlertViewDelegate,UITextFieldDelegate,UINavigationControllerDelegate> { NSString * toEmail; } - (IBAction)getCaontactDetail:(id)sender; @end 

在.m文件中

  - (IBAction)getCaontactDetail:(id)sender { //open contact book ABPeoplePickerNavigationController *addressBookController = [[ABPeoplePickerNavigationController alloc]init]; addressBookController.peoplePickerDelegate = self; addressBookController.delegate = self; addressBookController.navigationBar.tintColor = [UIColor redColor]; addressBookController.searchDisplayController.searchBar.tintColor = [UIColor redColor]; addressBookController.searchDisplayController.searchBar.backgroundColor = [UIColor blackColor]; if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ [self presentViewController:addressBookController animated:YES completion:nil]; } else { [self presentModalViewController:addressBookController animated:YES]; } addressBookController = nil; } #pragma mark - #pragma mark ABPeoplePickerNavigationController Delegate Method // called when address book closed - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ [peoplePicker dismissViewControllerAnimated:YES completion:nil]; } else { [peoplePicker dismissModalViewControllerAnimated:YES]; } } // called when select any contact from address book - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { //parse all data of selected contact ABMultiValueRef addresses = (__bridge ABMultiValueRef)((__bridge NSMutableDictionary *)ABRecordCopyValue(person, kABPersonAddressProperty)); NSArray *addressesArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(addresses); NSDictionary *dictAddress = [addressesArray objectAtIndex:0]; //get the phone number ABMultiValueRef phone = (__bridge ABMultiValueRef)((__bridge NSMutableDictionary *)ABRecordCopyValue(person, kABPersonPhoneProperty)); NSArray *phoneArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phone); NSMutableString *strPhone = [NSMutableString string]; for (int i=0; i<[phoneArray count]; i++) { [strPhone appendString:[NSString stringWithFormat:@"%@,",[phoneArray objectAtIndex:i]]]; } //convert in to NSString and NSInteger NSInteger contactId = (NSInteger) ABRecordGetRecordID(person); NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty)==nil?@"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)==nil?@"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); NSString *street = [dictAddress valueForKey:@"Street"]==nil?@"":[dictAddress valueForKey:@"Street"]; NSString *telephone = [strPhone stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]]; NSString *city = [dictAddress valueForKey:@"City"]==nil?@"":[dictAddress valueForKey:@"City"]; NSString *postcode = [dictAddress valueForKey:@"ZIP"]==nil?@"":[dictAddress valueForKey:@"ZIP"]; NSString *state = [dictAddress valueForKey:@"State"]==nil?@"":[dictAddress valueForKey:@"State"]; NSString *country = [dictAddress valueForKey:@"CountryCode"]==nil?@"":[dictAddress valueForKey:@"CountryCode"]; NSString *recipientName = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; NSLog(@"contactId : %i recipientName : %@ street : %@ telephone : %@ city : %@ postcode : %@ state : %@ country : %@",contactId,recipientName,street,telephone,city,postcode,state,country); //get the contact image UIImage *img ; if (person != nil && ABPersonHasImageData(person)) { if ( &ABPersonCopyImageDataWithFormat != nil ) { // iOS >= 4.1 img= [UIImage imageWithData:(__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)]; } else { // iOS < 4.1 img= [UIImage imageWithData:(__bridge NSData *)ABPersonCopyImageData(person)]; } } else { img= nil; } contactIV.image = img; contactNameLbl.text = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; contactNumLbl.text = telephone; //get email address ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); NSArray *emailArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(emails); //display alert if contact does not contain email addreess if (emailArray.count == 0) { UIAlertView * alert = [[UIAlertView alloc] initWithTitle:nil message:@"The person you selected does not have an email address on file. Please enter their email address below." delegate:self cancelButtonTitle:nil otherButtonTitles:@"Cancel",@"Submit",nil]; alert.tag = 1; alert.alertViewStyle = UIAlertViewStylePlainTextInput; UITextField * alertTextField = [alert textFieldAtIndex:0]; // assert(alertTextField); alertTextField.delegate = self; alertTextField.keyboardType = UIKeyboardTypeEmailAddress; alertTextField.placeholder = @"Enter Email address"; [alert show]; } contactEmailLbl.text = [emailArray objectAtIndex:0]; //set all object to nil for memory management dictAddress = nil; addresses = nil; addressesArray = nil; phone = nil; phoneArray = nil; strPhone = nil; if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ [peoplePicker dismissViewControllerAnimated:YES completion:nil]; } else { [peoplePicker dismissModalViewControllerAnimated:YES]; } return NO; } // called to show detail of contact and user select contact - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { return NO; }