ios 简书 获取通讯录信息_ios 获取本地通讯录信息

iphone如许app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和AddressBook两个包,具体实现方法如下

ABAddressBookRef addressBook = ABAddressBookCreate();//定义通讯录名字为addressbook

CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook);//将通讯录中的信息用数组方式读出

CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);//获取通讯录中联系人

iphoneContactList = [[NSMutableArray alloc] initWithCapacity:0];

for (int i = 0; i < nPeople; i++)

{

IphoneContact * iphoneContact = [[IphoneContact alloc] init];

NSData *imageData = [[[NSData alloc] init]autorelease];

NSString *address = [[[NSString alloc] init]autorelease];

ABRecordRef person = CFArrayGetValueAtIndex(contacts, i);//取出某一个人的信息

NSInteger lookupforkey =(NSInteger)ABRecordGetRecordID(person);//读取通讯录中联系人的唯一标识

NSDate * createDate = (NSDate *)ABRecordCopyValue(person, kABPersonCreationDateProperty);// 读取通讯录中联系人的创建日期

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];

[formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];

NSString* birthDay = [formatter stringFromDate:createDate];

[formatter release];

NSString *createDate1 = [birthDay stringByReplacingOccurrencesOfString:@"-" withString:@""];

NSString *createDate2 = [createDate1 stringByReplacingOccurrencesOfString:@":" withString:@""];

NSString *createDate3 = [createDate2 stringByReplacingOccurrencesOfString:@" " withString:@""];

NSLog(@"1111========%@",createDate3);

NSLog(@"222222========%@",birthDay);

NSString *indexInIphone = [NSString stringWithFormat:@"%i",lookupforkey];

iphoneContact.lookUpKey = [createDate3 stringByAppendingString:indexInIphone];

//上诉操作是将某个联系人的标识号与创建日期进行组合,得到唯一的标识,是为了当时特殊的需要,一般不会有这种变态应用,这是因为ABRecordGetRecordID在一个手机中是唯一的,即使删掉某一个联系人,这个号也不会在被占用。

//读取联系人姓名属性

if (ABRecordCopyValue(person, kABPersonLastNameProperty)&&(ABRecordCopyValue(person, kABPersonFirstNameProperty))== nil) {

iphoneContact.contactName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

}else if (ABRecordCopyValue(person, kABPersonLastNameProperty) == nil&&(ABRecordCopyValue(person, kABPersonFirstNameProperty))){

iphoneContact.contactName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);

}else if (ABRecordCopyValue(person, kABPersonLastNameProperty)&&(ABRecordCopyValue(person, kABPersonFirstNameProperty))){

NSString *first =(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);

NSString *last = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

iphoneContact.contactName = [NSString stringWithFormat:@"%@%@",last,first];

}

//读取联系人姓名的第一个汉语拼音,用于排序,调用此方法需要在程序中加载pingyin.h pingyin.c,如有需要请给我联系。

iphoneContact.pinyin =[[NSString stringWithFormat:@"%c",pinyinFirstLetter([iphoneContact.contactName characterAtIndex:0])] uppercaseString];

//读取联系人公司信息

iphoneContact.contactCompany = (NSString *)ABRecordCopyValue(person, kABPersonOrganizationProperty);

//读取联系人工作

iphoneContact.contactJob = (NSString *)ABRecordCopyValue(person, kABPersonJobTitleProperty);

//读取联系人email信息,email有好几种,比如工作邮箱,家庭邮箱,通过ABMultiValueCopyLabelAtIndex 属性来判断,下面给出了例子

ABMultiValueRef emailForWORK = ABRecordCopyValue(person, kABPersonEmailProperty);

if ((emailForWORK != nil)&&ABMultiValueGetCount(emailForWORK)>0) {

for (int k = 0; k < ABMultiValueGetCount(emailForWORK); k++) {

NSString * aEmail = (NSString *)ABMultiValueCopyValueAtIndex(emailForWORK, k);

NSString * aEmailLabel = (NSString *)ABMultiValueCopyLabelAtIndex(emailForWORK, k);

if ([aEmailLabel isEqualToString:@"_$!!$_"]) {

iphoneContact.contactEmail = aEmail;

}

}

}

//读取通信地址信息,在ios中国家,省份,城市,区,街道,号都是单独存储的,需要单独读取然后在组合(根据需要)

ABMultiValueRef addressTotal = ABRecordCopyValue(person, kABPersonAddressProperty);

if (addressTotal) {

int count = ABMultiValueGetCount(addressTotal);

for(int j = 0; j < count; j++)

{

NSDictionary* personaddress =(NSDictionary*) ABMultiValueCopyValueAtIndex(addressTotal, j);

NSString* country = [personaddress valueForKey:(NSString *)kABPersonAddressCountryKey];

if(country != nil)

address = [NSString stringWithFormat:@"%@",country];

NSString* city = [personaddress valueForKey:(NSString *)kABPersonAddressCityKey];

if(city != nil)

address = [address stringByAppendingFormat:@"%@",city];

NSString* state = [personaddress valueForKey:(NSString *)kABPersonAddressStateKey];

if(state != nil)

address = [address stringByAppendingFormat:@"%@",state];

NSString* street = [personaddress valueForKey:(NSString *)kABPersonAddressStreetKey];

if(street != nil)

address = [address stringByAppendingFormat:@"%@",street];

}

iphoneContact.contactAdress = address;

}

//读取电话信息,和emial类似,也分为工作电话,家庭电话,工作传真,家庭传真。。。。

ABMultiValueRef phone = ABRecordCopyValue(person, kABPersonPhoneProperty);

if ((phone != nil)&&ABMultiValueGetCount(phone)>0) {

for (int m = 0; m < ABMultiValueGetCount(phone); m++) {

NSString * aPhone = [(NSString *)ABMultiValueCopyValueAtIndex(phone, m) autorelease];

NSString * aLabel = [(NSString *)ABMultiValueCopyLabelAtIndex(phone, m) autorelease];

if ([aLabel isEqualToString:@"_$!!$_"]) {

iphoneContact.contactMobile= aPhone;

}

if ([aLabel isEqualToString:@"_$!!$_"]) {

iphoneContact.contactFax = aPhone;

}

if ([aLabel isEqualToString:@"_$!!$_"]) {

iphoneContact.contactTelephone= aPhone;

}

}

}

//读取照片信息

imageData = (NSData *)ABPersonCopyImageData(person);

UIImage *myImage = [UIImage imageWithData:imageData];

CGSize newSize = CGSizeMake(55, 55);

UIGraphicsBeginImageContext(newSize);

[myImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();//上诉代码实现图片压缩,可根据需要选择,现在是压缩到55*55

imageData = UIImagePNGRepresentation(newImage);

if (imageData) {

NSData * BimageData = [GTMBase64 encodeData:imageData];

iphoneContact.headImage= [[NSString alloc] initWithData:BimageData encoding:NSUTF8StringEncoding];

}

iphoneContact.isSelected = NO;

[iphoneContactList addObject:iphoneContact];//将读取的某一个人信息放到我们自定义的可变数组中

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值