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

ios读取通讯录信息的更多相关文章

  1. ios 读取通讯录数据

    #import <Foundation/Foundation.h> @interface LoadingContactData : NSObject // 读取通讯录 + (Loading ...

  2. android 读取通讯录显示到gridview

    ........... <GridView android:id="@+id/gridView1" android:layout_width="match_pare ...

  3. iOS访问通讯录开发-读取联系人信息

    读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...

  4. React Native之获取通讯录信息并实现类通讯录列表(ios android)

    React Native之获取通讯录信息并实现类通讯录列表(ios android) 一,需求分析 1,获取通讯录信息,筛选出通讯录里有多少好友在使用某个应用. 2,获取通讯录信息,实现类通讯录,可拨 ...

  5. iOS获取通讯录所有联系人信息

    以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...

  6. IOS 获取通讯录中信息

    获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...

  7. ios 获取通讯录的所有信息

    iOS获取通讯录全部信息 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBoo ...

  8. iOS 获得通讯录中联系人的所有属性--b

    ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...

  9. iOS有关通讯录操作

    一.首先获取用户通讯录授权信息. 在AppDelegate中导入#import <AddressBook/AddressBook.h>框架,在下列方法中获取授权信息. - (BOOL)ap ...

随机推荐

  1. yii2解析非x-www-form-urlencoded类型的请求数据(json,xml)

    组件配置添加: 'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', 'applicat ...

  2. Material Design:CollapsingToolbarLayout

    activity_main.xml: <android.support.design.widget.CoordinatorLayout xmlns:android="http://sc ...

  3. redis安装与php扩展

    redis安装:就是一个解压缩的过程 注意先运行:redis-server.exe,在运行redis-cli.exe. php扩展redis. 以上是如何选择相应的文件. 在把文件放在php/ext下 ...

  4. 问题记录-Fragment导包不同导致无法自动转型

    代码如下 public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle save ...

  5. clojure

    ide http://updatesite.ccw-ide.org/stable https://cursiveclojure.com/ http://web.clojurerepl.com/ htt ...

  6. Oracle表结构转换SqlSERVER表结构 脚本

    在审计工作中,有时需要将Oracle的表结构修改后再SqlSERVER中创建表结构,然后将数据导入到SqlSERVER中,在修改表结构的过程中方法狠多.手工修改,最蠢的方法,或者用工具UE批量修改,还 ...

  7. Nginx源码结构

    上一章对Nginx的架构有了一个初步的了解.这章,为了对源码仔细的剖析,先要对Nginx的源码结构有一个了解.从宏观上把握源码模块的结构. 一.nginx源码的3个目录结构 在安装的nginx的目录下 ...

  8. 有关GIT

    今天上班,发现没什么事情. 就看了一些博客,发现有个不错的东西,分享一下. 参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd183612 ...

  9. 关于android WebViewClient的方法解释

    1.public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true ...

  10. jquery 源码学习(一)

    从上边的注释看,jQuery的源码结构相当清晰.条理,不像代码那般晦涩和让人纠结   1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQ ...