ios读取通讯录信息

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

ABAddressBookRef addressBook = ABAddressBookCreate();//定义通讯录名字为addressbook
       CFArrayRef contacts = ABAddressBookCopyArrayOf AllPeople(addressBook);//将通讯录中的信息用数组方式读出
       CFIndex nPeople = ABAddressBookGetPersonCo unt(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(contact s, i);//取出某一个人的信息
             NSInteger lookupforkey =(NSInteger)ABRecordGetRecordID(person);//读取通讯录中联系人的唯一标识
           NSDate * createDate = (NSDate *)ABRecordCopyValue(person, kABPersonCreationDatePro perty);// 读取通讯录中联系人的创建日期
               NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
               [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
               NSString* birthDay = [formatter stringFromDate:createDa te];
               [formatter release];
           
              
              
               NSString *createDate1 = [birthDay stringByReplacingOccurre ncesOfString:@"-" withString:@""];
               NSString *createDate2 = [createDate1 stringByReplacingOccurre ncesOfString:@":" withString:@""];
               NSString *createDate3 = [createDate2 stringByReplacingOccurre ncesOfString:@" " withString:@""];
               NSLog(@"1111========%@",createDate3);
               NSLog(@"222222========%@",birthDay);
               NSString *indexInIphone = [NSString stringWithFormat:@"%i",lookupforkey];
               iphoneContact.lookUpKey = [createDate3 stringByAppendingString:indexInIphone];
             //上诉操作是将某个联系人的标识号与创建日期进行组合,得到唯一的标识,是为了当时特殊的需要,一般不会有这种变态应用,这是因为ABRecordGetRecordID在一个手机中是唯一的,即使删掉某一个联系人,这个号也不会在被占用。
              
              
              
                           //读取联系人姓名属性
               if (ABRecordCopyValue(person, kABPersonLastNamePropert y)&&(ABRecordCopyValue(person, kABPersonFirstNameProper ty))== nil) {
                       iphoneContact.contactName = (NSString *)ABRecordCopyValue(person, kABPersonLastNamePropert y);
               }else if (ABRecordCopyValue(person, kABPersonLastNamePropert y) == nil&&(ABRecordCopyValue(person, kABPersonFirstNameProper ty))){
                       iphoneContact.contactName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProper ty);
               }else if (ABRecordCopyValue(person, kABPersonLastNamePropert y)&&(ABRecordCopyValue(person, kABPersonFirstNameProper ty))){
                      
                       NSString *first =(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProper ty);
                       NSString *last = (NSString *)ABRecordCopyValue(person, kABPersonLastNamePropert y);
                       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, kABPersonOrganizationPro perty);
              
               //读取联系人工作
               iphoneContact.contactJob = (NSString *)ABRecordCopyValue(person, kABPersonJobTitlePropert y);
              
              
              
              
               //读取联系人email信息,email有好几种,比如工作邮箱,家庭邮箱,通过ABMultiValueCopyLabelAtI ndex 属性来判断,下面给出了例子                              
               ABMultiValueRef emailForWORK = ABRecordCopyValue(person, kABPersonEmailProperty);
               if ((emailForWORK != nil)&&ABMultiValueGetCount(emailForWORK)>0) {
                      
                       for (int k = 0; k < ABMultiValueGetCount(emailForWORK); k++) {
                               NSString * aEmail = (NSString *)ABMultiValueCopyValueAtI ndex(emailForWORK, k);
                               NSString * aEmailLabel = (NSString *)ABMultiValueCopyLabelAtI ndex(emailForWORK, k);
                              
                               if ([aEmailLabel isEqualToString:@"_$!<Work>!$_"]) {
                                       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*) ABMultiValueCopyValueAtI ndex(addressTotal, j);              
                               NSString* country = [personaddress valueForKey:(NSString *)kABPersonAddressCountryK ey];
                               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 *)kABPersonAddressStreetKe y];
                               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 *)ABMultiValueCopyValueAtI ndex(phone, m) autorelease];
                               NSString * aLabel = [(NSString *)ABMultiValueCopyLabelAtI ndex(phone, m) autorelease];
                              
                               if ([aLabel isEqualToString:@"_$!<Mobile>!$_"]) {
                                       iphoneContact.contactMobile= aPhone;
                                      
                               }
                              
                               if ([aLabel isEqualToString:@"_$!<WorkFAX>!$_"]) {
                                       iphoneContact.contactFax = aPhone;
                               }
                              
                               if ([aLabel isEqualToString:@"_$!<Work>!$_"]) {
                                       iphoneContact.contactTelephone= aPhone;
                               }            
                       }
               }
              
              
              
              
               //读取照片信息
               imageData = (NSData *)ABPersonCopyImageData(person);
               UIImage *myImage = [UIImage imageWithData:imageData];
               CGSize newSize = CGSizeMake(55, 55);
               UIGraphicsBeginImageCont ext(newSize);
               [myImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
               UIImage *newImage = UIGraphicsGetImageFromCu rrentImageContext();
               UIGraphicsEndImageContex t();//上诉代码实现图片压缩,可根据需要选择,现在是压缩到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];   //将读取的某一个人信息放到我们自定义的可变数组中              
              
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值