zoukankan      html  css  js  c++  java
  • ios读取通讯录信息

    ios读取通讯录信息

     (2012-05-22 14:07:11)
    标签: 

    ios读取通讯录

     

    it

     
    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:@"_$!<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*) 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:@"_$!<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);
            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];  //将读取的某一个人信息放到我们自定义的可变数组中        
            
        }

     
  • 相关阅读:
    LinQ表达式的一点点总结(二)select中新建对象
    给自己的博客添加分享到功能
    职场日记2上班第一天
    清楚屏幕右侧变化的数据Application.Current.Host.Settings.EnableFrameRateCounter = true;
    基于委托的异步
    C#中的装箱与拆箱
    关于java的初始化问题
    StreamReader类以及其方法ReadLine,Read,ReadToEnd的分析
    WP7的控件开发入门(二)
    单元测试的阶段性总结
  • 原文地址:https://www.cnblogs.com/liyufeng2013/p/3438472.html
Copyright © 2011-2022 走看看