文档章节

IOS-OC读取通讯录联系人信息

felixBubble
 felixBubble
发布于 2015/12/29 14:08
字数 413
阅读 41
收藏 0

获取通讯录访问授权状态:

ABAuthorizationStatus type = ABAddressBookGetAuthorizationStatus();

/*

 * kABAuthorizationStatusNotDetermined  用户还没有决定

 * kABAuthorizationStatusRestricted     受限制

 * kABAuthorizationStatusDenied         拒绝

 * kABAuthorizationStatusAuthorized     许可

 */


在.h文件中申明:

///装载联系人记录的数组
@property (nonatomic, strong) NSArray *listContacts;


如果是第一次进入APP则会弹出提示框,询问用户是否允许APP访问通讯录。如果不是第一次进入APP,则根据之前的授权状态进入相应代码。

在.m文件中的viewDidLoad方法中加入:

///申请授权
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
    if (granted) {//授权允许
        [self filterContentForSearchText:@""];    //如果授权允许,则调用自定义的filterContentForSearchText:方法
    } else {//授权拒绝
    }
});
//释放Book
CFRelease(addressBook);
///查询通讯录联系人信息方法
- (void)filterContentForSearchText:(NSString *)searchText {
    //如果没有授权,则退出
    if (ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusAuthorized) {
        return;
    }
    
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    if ([searchText length] == 0) {
        //查询所有
        self.listContacts  = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
        for (int i = 0; i < _listContacts.count; i++) {
            ABRecordRef thisPerson = CFBridgingRetain([self.listContacts objectAtIndex:i]);
            
            ///读取名
            NSString *firstName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty));
            firstName = firstName != nil?firstName:@"";
            
            ///读取姓
            NSString *lastName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonLastNameProperty));
            lastName = lastName != nil?lastName:@"";
            
            NSLog(@"第 %d 位联系人姓名为:%@ %@", i, firstName, lastName);
            
            
            ///读取多值属性--电话号码
            ABRecordID personID = ABRecordGetRecordID(thisPerson);
            ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, personID);
            
            ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
            NSArray *phoneNumberArray = CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(phoneNumberProperty));
            for (int index = 0; index < phoneNumberArray.count; index++) {
                NSString *phoneNumber = [phoneNumberArray objectAtIndex:index];
                NSString *phoneNumberType = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(phoneNumberProperty, index));
                NSLog(@"他的 %@ 号码为:%@", phoneNumberType, phoneNumber);
            }
            
            CFRelease(phoneNumberProperty);
            CFRelease(thisPerson);
        }
    } else {
        //条件查询
    }
}


© 著作权归作者所有

felixBubble
粉丝 0
博文 1
码字总数 413
作品 0
程序员
私信 提问
iOS曝出新漏洞:可绕过密码保护访问联系人信息

北京时间2月24日凌晨消息,据外国破解网站iPhoneislam.com周四发布的消息显示,该网站于本周在苹果iOS 5.0.1软件中发现了一个 新的漏洞,可以让攻击者绕过iPhone手机的密码保护,在未获授权的...

红薯
2012/02/24
1K
6
iOS开发之AddressBook框架详解

iOS开发之AddressBook框架详解 一、写在前面 首先,AddressBook框架是一个已经过时的框架,iOS9之后官方提供了Contacts框架来进行用户通讯录相关操作。尽管如此,AddressBook框架依然是一个非...

珲少
2018/08/19
0
0
iOS开发之AddressBookUI框架详解

iOS开发之AddressBookUI框架详解 一、关于AddressBookUI框架 AddressbookUI是iOS开发框架中提供的一套通讯录界面组件。其中封装好了一套选择联系人,查看联系人的界面,在需要时开发者可以直...

珲少
2018/08/23
0
0
iOS三维菜单、调试工具、封装通讯录、网络框架、多种控件和动画等源码

iOS精选源码 一个调用系统通讯录和获取通讯录所有联系人的封装(http://www.code4app.com/thread-29726-1-1.html) ios scrollview嵌套tableview同向滑动(初级、进阶), 支持OC / Swift(http...

sunnyaigd
2018/05/15
0
0
iOS 9.3.1存在安全漏洞,移动端如何做好安全加固

近期苹果公司正式推送了新的iOS 9.3.1固件更新,从外媒报道中看出,新版本推出不久就出现了隐私的漏洞,在搭载了3D Touch的苹果6s系列中,都不幸的中着,表现的形式为不需要密码就可以直接的...

NAGA娜迦
2016/04/06
158
0

没有更多内容

加载失败,请刷新页面

加载更多

Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
5
0
Kernel DMA

为什么会有DMA(直接内存访问)?我们知道通常情况下,内存数据跟外设之间的通信是通过cpu来传递的。cpu运行io指令将数据从内存拷贝到外设的io端口,或者从外设的io端口拷贝到内存。由于外设...

yepanl
今天
6
0
hive

一、hive的定义: Hive是一个SQL解析引擎,将SQL语句转译成MR Job,然后再在Hadoop平台上运行,达到快速开发的目的 Hive中的表是纯逻辑表,就只是表的定义,即表的元数据。本质就是Hadoop的目...

霉男纸
今天
5
0
二、Spring Cloud—Eureka(Greenwich.SR1)

注:本系列文章所用工具及版本如下:开发工具(IDEA 2018.3.5),Spring Boot(2.1.3.RELEASE),Spring Cloud(Greenwich.SR1),Maven(3.6.0),JDK(1.8) Eureka: Eureka是Netflix开发...

倪伟伟
昨天
17
0
eclipse常用插件

amaterasUML https://takezoe.github.io/amateras-update-site/ https://github.com/takezoe/amateras-modeler modelGoon https://www.cnblogs.com/aademeng/articles/6890266.html......

大头鬼_yc
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部