I'm new using the Address book and I would try to get some info for the contacts in the phone. Is possible get the image contact of all the contacts? This will be for iOS4 or higher.
Thanks in advance!
If you've got a contact photo set in Google+ or the like, it'll pull that photo automatically, so that's the photo which'll appear to others.
Answer: A: No they can't. Those photos are for your device only. They can't see them.
This is really nice code that i found to select all the contact inaformation and maybe helpfull to future user..
add AddressBookUI and AddressBook framework in project
Than in .h file
#import <UIKit/UIKit.h>
#import <AddressBookUI/AddressBookUI.h>
@interface ViewController : UIViewController<ABPeoplePickerNavigationControllerDelegate,UIAlertViewDelegate,UITextFieldDelegate,UINavigationControllerDelegate>
{
NSString * toEmail;
}
- (IBAction)getCaontactDetail:(id)sender;
@end
And in .m file
- (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;
}
Yes it is completely possible, you simply ask each person record whether it has an image:
See the documentation: http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html#//apple_ref/doc/uid/TP40007210
Relevant Functions:
ABPersonHasImageData(person)
ABPersonCopyImageDataWithFormat(person)
The ABPersonCopyImageDataWithFormat
returns a CFDataRef.
Convert it to NSData with this (ARC) NSData* data = (__bridge_transfer NSData*) cfData;
An image can then be created with [UIImage imageWithData:data]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With