如何从iPad获取联系人详细信息并在我的应用中使用它。我正在使用以下代码并从模拟器获取详细信息。但是在ipad中运行时我没有收到联系人图片,电子邮件等。我正确地收到了电话号码。
ABAddressBookRef addressBook = ABAddressBookCreate();
// Get all contacts in the addressbook
NSArray *allPeople = (__bridge NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
for (id person in allPeople) {
// Get all phone numbers of a contact
ABMultiValueRef phoneNumbers = ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty);
ABMultiValueRef emailaddress = ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonEmailProperty);
// If the contact has multiple phone numbers, iterate on each of them
for (int i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {
NSString *phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, i);
// Remove all formatting symbols that might be in both phone number being compared
NSCharacterSet *toExclude = [NSCharacterSet characterSetWithCharactersInString:@"/.()- +"];
phone = [[phone componentsSeparatedByCharactersInSet:toExclude] componentsJoinedByString: @""];
if ([phone isEqualToString:number]) {
NSData *contactImageData = (__bridge NSData*)ABPersonCopyImageData((__bridge ABRecordRef)(person));
NSString *mail = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(emailaddress, i);
NSLog(@"%@",mail);
if(mail)
{
hasEmail=TRUE;
NSLog(@"true");
}
else{
hasEmail=FALSE;
NSLog(@"false");
}
ContactImage = [[UIImage alloc] initWithData:contactImageData];
// [conImage setImage:ContactImage];
break;
break;
}
}
}
if(ContactImage)
{
[conImage setImage:ContactImage];
}
else{
NSLog(@"no image");
}
我需要在ipad上运行时获取图像
答案 0 :(得分:0)
您可以将此代码实施到ViewDidLoad
方法。
ABAddressBookRef addressBook;
if ([self isABAddressBookCreateWithOptionsAvailable]) {
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL,&error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
// callback can occur in background, address book must be accessed on thread it was created on
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
} else if (!granted) {
} else {
// access granted
[self GetAddressBook];
}
});
});
} else {
// iOS 4/5
[self GetAddressBook];
}
获取联系人的方法: -
-(void)GetAddressBook
{
Contacts = [[NSMutableArray alloc]init];
if (ABAddressBookCreateWithOptions) {
@try {
ABAddressBookRef addressBook = ABAddressBookCreate();
// NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
if (!addressBook) {
NSLog(@"opening address book");
}
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSLog(@"opening address book ==%ld",nPeople);
for (int i=0;i < nPeople;i++) {
NSMutableDictionary *dOfPerson=[NSMutableDictionary dictionary];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i);
NSString *Contact;
ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty));
CFStringRef firstName, lastName;
NSMutableArray *array = [[NSMutableArray alloc]init];
NSString *email;
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
ABMultiValueRef multiValueRef = ABRecordCopyValue(ref, kABPersonEmailProperty);
array = [(__bridge NSMutableArray *)ABMultiValueCopyArrayOfAllValues(multiValueRef) mutableCopy];
email = ([array count] > 0) ? array[0] : @"";
if(firstName)
{
Contact = [NSString stringWithFormat:@"%@", firstName];
if(lastName)
Contact = [NSString stringWithFormat:@"%@ %@",firstName,lastName];
}
[dOfPerson setObject:Contact forKey:@"name"];
[dOfPerson setObject:[NSString stringWithFormat:@"%d", i] forKey:@"id"];
[dOfPerson setObject:[NSString stringWithFormat:@"%@",@""] forKey:@"found"];
[dOfPerson setObject:email forKey:@"email"];
NSString* mobileLabel;
for(CFIndex j = 0; j< ABMultiValueGetCount(phones); j++)
{
mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, j);
if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
{
[dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"Phone"];
}
else if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel])
{
[dOfPerson setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"Phone"];
break ;
}
}
[Contacts addObject:dOfPerson];
}
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
dispatch_async(dispatch_get_main_queue(), ^{
});
NSLog(@"%@",Contacts);
if([Contacts count]>0)
{
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[Contacts sortUsingDescriptors:[NSArray arrayWithObject:sort]];
[Tableview reloadData];
}
else
{
}
}
else
{
[self GetAddressBook];
}
}
此处通讯录是NSMutableArray
,所有数据都显示在UITableView
中。
此数据包括名字,姓氏,电话号码和电子邮件地址。希望它有所帮助。