`
zjjzmw1
  • 浏览: 1361663 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

ios 获取通讯录

    博客分类:
  • 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

1
3
分享到:
评论

相关推荐

    iOS 获取通讯录

    总结来说,iOS获取通讯录有两种方式:带有UI的ABPeoplePickerNavigationController/CNContactPickerViewController,适合快速集成但限制较多;无UI的CNContactStore方法则能提供更高的灵活性,适合需要自定义界面和...

    iOS 获取通讯录及显示

    总的来说,iOS获取通讯录的过程包括请求权限、获取联系人信息以及展示这些信息。开发者需要注意尊重用户的隐私权,合理地请求和使用权限,同时提供清晰的提示和反馈。通过熟练掌握这些知识,你就能在iOS应用中实现...

    iOS 获取通讯录 最新方法 测试可用

    本篇文章将详细介绍一种最新的、经过真机测试可用的iOS获取通讯录的方法。 首先,我们需要了解iOS系统对访问用户数据的严格控制。自iOS 6开始,苹果引入了权限管理系统,应用需要获取用户的明确授权才能访问通讯录...

    iOS获取通讯录

    总之,iOS获取通讯录涉及到AddressBook框架、权限管理以及对联系人属性的访问。通过这些技术,开发者可以为用户提供如查看、管理通讯录等服务,但必须始终尊重并保护用户的隐私。在实际开发中,应遵守Apple的App ...

    iOS获取通讯录按字母排序索引列表

    本文将深入探讨如何在iOS中实现“iOS获取通讯录按字母排序索引列表”的功能,主要涉及`AddressBook`框架的使用。 首先,我们需要了解`AddressBook`框架。这是Apple提供的一个核心库,用于访问和管理设备上的联系人...

    ios 获取通讯录的代码

    在iOS平台上,获取通讯录是开发过程中常见的需求,主要用于实现如联系人同步、备份或特定功能的个性化。本文将详细讲解如何使用Objective-C或Swift语言来获取iOS设备上的通讯录,并将单个联系人信息存储到数组中。 ...

    ios-获取通讯录信息.zip

    综上所述,"ios-获取通讯录信息.zip"项目提供了一个学习和实践iOS获取通讯录信息的平台。通过分析和运行该项目,开发者能够了解并掌握iOS系统功能中关于访问通讯录的核心知识点,进一步提升自己的iOS开发技能。

    详解iOS获取通讯录的4种方式

    在iOS开发中,获取用户设备上的通讯录信息是一项常见的需求,比如为了推荐好友或同步联系人数据。本文将详细介绍四种不同的方法来实现这一功能,针对不同的iOS版本和使用场景。 ### 方案一:AddressBookUI....

    iOS9 通讯录新框架Demo

    这个Demo项目“iOS9 通讯录新框架Demo”旨在演示如何利用这个新框架进行实际开发操作。让我们深入探讨一下这个框架的关键知识点。 首先,我们要了解Contacts框架的基础结构。Contacts框架主要包括以下几个核心类: ...

    iOS两种获取通讯录方式

    在iOS平台上,获取通讯录是开发过程中常见的需求,主要用于实现联系人管理、社交应用等功能。本文将详细探讨两种主流的获取iOS设备通讯录的方式,并强调它们的兼容性。 第一种方式是使用`Contacts Framework`。从...

    ios 操作通讯录联系人demo大全

    ios 操作通讯录联系人demo大全

    ios-获取通讯录列表.zip

    本教程将基于提供的"ios-获取通讯录列表.zip"压缩包,深入讲解如何在iOS应用中请求用户权限并获取其通讯录列表。该示例项目"LXAddressBookDemo"是一个GitHub上的开源代码库,它演示了这一过程。 首先,我们需要了解...

    获取通讯录

    二、iOS 获取通讯录 1. **权限请求**:在iOS中,访问通讯录需要用户授权。使用`CNContactStore`类的`requestAccess(for:)`方法请求权限。 ```swift let store = CNContactStore() store.requestAccess(for: ....

    iOS 获取本地通讯录

    // 用户已授权,可以开始获取通讯录 } else { // 用户未授权,展示错误或提示信息 } } ``` 当获取到权限后,你可以创建一个`CNContactStore`实例,用于执行查询和操作。通过这个实例,你可以使用`...

    iOS获取手机通讯录方式方法(最新)

    最近学习了iOS获取手机通讯录方式方法,现在分享给大家。希望此文章对各位有所帮助。 一、iOS 9 以前的通讯录框架 AddressBookUI框架:提供了联系人列表界面、联系人详情界面、添加联系人界面等,一般用于选择联系...

    双端完美获取通讯录系统源码

    【标题】:“双端完美获取通讯录系统源码”指的是一个设计用于在不同终端上(如iOS和Android)高效、完整地获取并管理用户通讯录的软件系统。这个系统的核心功能在于提供跨平台的支持,使得用户能够在手机或电脑等...

    ios-通讯录.zip

    在iOS开发中,通讯录是应用常常需要交互的重要部分,特别是在个人信息管理或者社交类应用中。这个名为"ios-通讯录.zip"的压缩包显然包含了关于如何在iOS应用中自定义头像并修改通讯录内容的示例代码或资源。让我们...

    iOS 获取手机通讯录

    iOS 获取手机通讯录的demo,很方便集成到项目,几行代码就可轻松调用 AddressBook *addressBook = [AddressBook shareAddressBook]; addressBook.delegate = self; [addressBook ...

    iOS设备通讯录获取,及其他小功能

    在iOS开发中,获取设备通讯录是一项常见的任务,这通常涉及到使用`Contacts`框架。`Contacts`框架提供了访问和管理用户联系人的方式,包括姓名、电话号码、电子邮件地址等信息。在标题“iOS设备通讯录获取,及其他小...

Global site tag (gtag.js) - Google Analytics