ios 获取通讯录

首先导入两个文件 :#import <AddressBook/AddressBook.h>

#import <AddressBookUI/AddressBookUI.h>

导入两个包。

 

由于在ios6以后对用户信息提供了安全的保护,在获取前必须要通过用户的同意才行。。。

 

所以需要下面的一段代码提示用户:

 addressBook = nil;

    

    if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 6.0)

    {

        addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

        

        //等待同意后向下执行

        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

        

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)

                                                 {

                                                     

                                                     dispatch_semaphore_signal(sema);

                                                     NSLog(@"这里是用户选择是否允许后的执行代码");

                                                     // [self showTongXunLu:addressBook];

                                                     

                                                 });

        

//dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

        dispatch_release(sema);

    } 

    else 

    { 

        addressBook = ABAddressBookCreate();

        [self showTongXunLu:addressBook];

 

    } 

 

有两个关键的问题:1,必须把//dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);注释了。。。因为不注释的话,点击home键才显示提示,显然不符合我们的目的。

2.在NSLog(@"这里是用户选择是否允许后的执行代码");

                                                     // [self showTongXunLu:addressBook];里面的这句话,是用户点击确定后执行的方法。在这个方法里面不能写只能运行在主线程里面的控件。

因为UITextView 这个控件只能在主线程里面才能运行,,所以我又在页面上加了一个按钮。目的是避免在分支线程里面运行。。。。

下面就整个文件了。。。。

#import <UIKit/UIKit.h>

#import <AddressBook/AddressBook.h>

#import <AddressBookUI/AddressBookUI.h>

@interface ViewController : UIViewController

{

    ABAddressBookRef addressBook;

}

@property (retain, nonatomic) IBOutletUITextView *myTextView;

@property (retain, nonatomic) NSString *nameTel;

 

 

-(void)showTongXunLu:(ABAddressBookRef)addressBook;

@end

 

 

 

 

 

 

 

#import "ViewController.h"

 

 

@interfaceViewController ()

 

@end

 

@implementation ViewController

@synthesize nameTel;

- (void)viewDidLoad

{

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.nameTel = [[NSString alloc]init];

    [selfReadAllPeoples];

    

    

    

}

 

- (IBAction)showAction:(id)sender {

    [selfshowTongXunLu:addressBook];

}

 

 

//读取所有联系人

 

-(void)ReadAllPeoples

 

{

    

    addressBook = nil;

    

    if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 6.0)

    {

        addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

        

        //等待同意后向下执行

        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

        

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)

                                                 {

                                                     

                                                     dispatch_semaphore_signal(sema);

                                                     NSLog(@"这里是用户选择是否允许后的执行代码");

                                                     // [self showTongXunLu:addressBook];

                                                     

                                                 });

        

//dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);

        dispatch_release(sema);

    } 

    else 

    { 

        addressBook = ABAddressBookCreate();

        [self showTongXunLu:addressBook];

    } 

    

   

}

 

 

-(void)showTongXunLu:(ABAddressBookRef)addressBook{

    NSArray *tmpPeoples = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

    

    for(id tmpPerson in tmpPeoples)

        

    {

        

        //获取的联系人单一属性:First name

        

        NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);

        

        NSLog(@"First name:%@", tmpFirstName);

        self.nameTel = [self.nameTel stringByAppendingFormat:@"\n\n%@ ",tmpFirstName];

        NSLog(@"\n==========----%@-----=============",self.nameTel);

        [tmpFirstName release];

        

        //获取的联系人单一属性:Last name

        

        NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);

        

        NSLog(@"Last name:%@", tmpLastName);

        self.nameTel = [self.nameTel stringByAppendingFormat:@"%@    :",tmpLastName];

        [tmpLastName release];

        

        //获取的联系人单一属性:Nickname

        

        NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);

        

        NSLog(@"Nickname:%@", tmpNickname);

        

        [tmpNickname release];

        

        //获取的联系人单一属性:Company name

        

        NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);

        

        NSLog(@"Company name:%@", tmpCompanyname);

        

        [tmpCompanyname release];

        

        //获取的联系人单一属性:Job Title

        

        NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);

        

        NSLog(@"Job Title:%@", tmpJobTitle);

        

        [tmpJobTitle release];

        

        //获取的联系人单一属性:Department name

        

        NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);

        

        NSLog(@"Department name:%@", tmpDepartmentName);

        

        [tmpDepartmentName release];

        

        //获取的联系人单一属性:Email(s)

        

        //        ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);

        //

        //        for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)

        //

        //        {

        //

        //            NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);

        //

        //            NSLog(@"Emails%d:%@", j, tmpEmailIndex);

        //

        //            [tmpEmailIndex release];

        //

        //        }

        //

        //        CFRelease(tmpEmails);

        

        //获取的联系人单一属性:Birthday

        

        NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);

        

        NSLog(@"Birthday:%@", tmpBirthday);

        

        [tmpBirthday release];

        

        //获取的联系人单一属性:Note

        

        NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);

        

        NSLog(@"Note:%@", tmpNote);

        

        [tmpNote release];

        

        //获取的联系人单一属性:Generic phone number

        

        ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);

        

        for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)

            

        {

            

            NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);

            

            NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);

            self.nameTel = [self.nameTel stringByAppendingFormat:@"%@",tmpPhoneIndex];

            [tmpPhoneIndex release];

            

        }

        

     CFRelease(tmpPhones);

        

    }

    

    //释放内存

    

  [tmpPeoples release];

    

//    CFRelease(tmpPeoples);

    self.myTextView.text = self.nameTel;

 

   

}

 

 

 

 

 

 

- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

- (void)dealloc {

    [_myTextViewrelease];

    [super dealloc];

}

- (void)viewDidUnload {

    [selfsetMyTextView:nil];

    [superviewDidUnload];

}

 

@end

猜你喜欢

转载自zhangmingwei.iteye.com/blog/1936277