一、iOS 9 以前的通讯录框架

AddressBookUI框架:提供了联系人列表界面、联系人详情界面、添加联系人界面等,一般用于选择联系人。

AddressBook 框架:纯 C 语言的 API,仅仅是获得联系人数据。没有提供 UI 界面展示,需要自己搭建联系人展示界面。

二、 iOS 9 以后最新通讯录框架

ContactsUI 框架:拥有 AddressBookUI 框架的所有功能,使用起来更加的面向对象。

Contacts 框架:拥有 AddressBook框架的所有功能,不再是 C 语言的 API,使用起来非常简单。

这次主要说下iOS9以后获取手机通讯录的方法:

所需框架

#import ```

遵循代理

```

1、请求授权判断

// 判断当前的授权状态

if (status != CNAuthorizationStatusAuthorized) {

UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请您设置允许APP访问您的通讯录\n设置-隐私-通讯录" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

return;

}```

这个说下几个授权状态,和AddressBook的差不多

typedef NS_ENUM(NSInteger, CNAuthorizationStatus)

{

/*! 用户尚未就应用程序是否可以访问联系人数据做出选择。 */

CNAuthorizationStatusNotDetermined = 0,

/*! 该应用程序没有权限访问联系人数据。

*用户无法更改此应用程序的状态,可能是由于主动限制(如父母控制到位)。 */

CNAuthorizationStatusRestricted,

/*! 用户明确拒绝对应用程序的联系人数据的访问。 */

CNAuthorizationStatusDenied,

/*! 该应用程序被授权访问联系人数据。 */

CNAuthorizationStatusAuthorized

} ```

// 判断当前的授权状态是否是用户还未选择的状态

if (status == CNAuthorizationStatusNotDetermined)

{

CNContactStore *store = [CNContactStore new];

[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {

if (granted){

NSLog(@"授权成功!");

}else{

NSLog(@"授权失败!");

}

}];

}```

**2、创建通讯录控制器**

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

//iOS 10

// AB_DEPRECATED("Use CNContactPickerViewController from ContactsUI.framework instead")

CNContactPickerViewController * contactVc = [CNContactPickerViewController new];

contactVc.delegate = self;

[self presentViewController:contactVc animated:YES completion:nil];

}```

如果在iOS10的机器上调用以前的ABPeoplePickerNavigationController老方法将直接崩溃。所以如果还是用以前的方法,则需要加判断版本判断

3、实现代理方法,获取单人信息(1.点击姓名显示详情 2.不显示详情)

// 选择某个联系人时调用

- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty

{

CNContact *contact = contactProperty.contact;

NSString *name = [CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName];

CNPhoneNumber *phoneValue= contactProperty.value;

NSString *phoneNumber = phoneValue.stringValue;

NSLog(@"%@--%@",name, phoneNumber);

}```

代理方法说明

// 1.选择联系人时使用(不展开详情)

(void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;

注:如果有上面的方法,下面的方法不执行

// 2.选择联系人某个属性时调用(展开详情)

(void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;

// 3.取消选中联系人时调用

(void)contactPickerDidCancel:(CNContactPickerViewController *)picker;```

4、取消选择的回调

- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker{

[picker dismissViewControllerAnimated:YES completion:nil];

}```

>到此上面的过程便可得到通讯录中一个人的信息,下面说一下获取手机的整体通讯录方法(获取全部联系人信息)

**5、获取全部通讯录信息**

// 创建通讯录对象

CNContactStore *contactStore = [CNContactStore new];

NSArray *keys = @[CNContactPhoneNumbersKey,CNContactGivenNameKey];

// 获取通讯录中所有的联系人

CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys];

[contactStore enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {

// 获取姓名

// NSString *firstName = contact.familyName;

NSString *lastName = contact.givenName;

NSLog(@"name: %@",lastName);

// 获取电话号码

for (CNLabeledValue *labeledValue in contact.phoneNumbers){

CNPhoneNumber *phoneValue = labeledValue.value;

NSString *phoneNumber = phoneValue.stringValue;

NSLog(@"number: %@",phoneNumber);

}

}];

*最后,有什么问题可以留言,相互学习!*

ios 简书 获取通讯录信息_iOS9以后获取手机通讯录相关推荐

  1. Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等

    一.工具:psutil模块 psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况:可以使用我们学习知识与这模块用来做系统监控,性能分析:如果大家熟悉Lin ...

  2. android获取电池信息;android获取电池容量、技术、电压、电量、温度等信息

    android获取电池信息:android获取电池容量.技术.电压.电量.温度等信息 1.这里我仅展示工具类,需要注意的是这里的部分值要刷新后才能显示,添加刷新UI的方法即可,而且电量温度等都是变化的 ...

  3. android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息

    android获取GPU信息:android获取GPU渲染器.供应商.版本和扩展名等信息 效果: 1.布局文件 <?xml version="1.0" encoding=&q ...

  4. android 通讯录备份 导入苹果手机,安卓手机通讯录怎么导入苹果手机? 手机通讯录怎么恢复导出...

    安卓手机通讯录怎么导入苹果手机?手机通讯录怎么恢复导出?对于手机数据被删的情况,真的是来去匆匆,不带走一点遗憾.轻轻的触碰联系人的删除键就可以把联系人联系方式进行清空了,那么应该如何恢复呢? 现在如此 ...

  5. android手机通讯录格式转换,手机通讯录小技巧,安卓手机通讯录转iPhone并不难,换机必学...

    原标题:手机通讯录小技巧,安卓手机通讯录转iPhone并不难,换机必学 今年618年中大促销,国内的电商巨头们分分大减价,就连号称保价的苹果手机,过万iPhone XS MAX都跌入八千户里.相信很多 ...

  6. ios 简书 获取通讯录信息_ios 各种权限整理

    联网权限 引入头文件 @import CoreTelephony; 应用启动后,检测应用中是否有联网权限 CTCellularData *cellularData = [[CTCellularData ...

  7. ios 简书 获取通讯录信息_当心!你用的共享充电宝可能被植入木马盗取信息

    出门在外,你的焦虑感是否会随着手机电量的降低而同步提高呢?乘车.支付.娱乐.联系都离不开手机,一旦没了电简直要丢掉半条命.这个时候遍布大街小巷的共享充电宝简直成了救命稻草.然而在你放心使用共享充电宝时 ...

  8. java微信获取用户信息_SpringBoot中获取微信用户信息的方法

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  9. mysql获取配置文件信息,四种获取MySQL数据库配置文件加载顺序

    简介 有时候帮人排查一下MySQL数据库问题的时候,用ps -ef查看MySQL数据库进程的时候,竟然不显示配置的相关信息. 如果想看MySQL数据库的配置,就会一头雾水,于是就特地整理了一下,4种查 ...

最新文章

  1. spark—3(Spark Scheduler)
  2. hibernate 逆向工程
  3. DOM中setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
  4. C#实现POST提交方式
  5. 极域电子书包课堂管理系统_【君莲微讯】君莲学校(小学部)开展电子书包第13共同体数学研讨活动...
  6. 转-- iOS 30多个iOS常用动画,带详细注释
  7. Linux系统编程---6(信号的机制,信号4要素,Linu常规信号表,定时器)
  8. 醒醒吧,这世界上根本没有稳定的工作
  9. java rpg对战_java实现模拟RPG格斗
  10. 应用密码学:单表代替密码简单介绍
  11. 基于深度学习的行人检测技术
  12. 记一次千人大项目的感受
  13. VC/MFC如何设置对话框、static背景颜色
  14. C#图片加载与内存释放
  15. BUGKU--web详解
  16. 湿气重会有哪些表现?如何祛湿
  17. 人工智能基础——什么是智能(智能的特征)
  18. Servlet文件下载例子详解及response的contentType类型大全
  19. 坦克小战的游戏规则说明(3)
  20. 张驰咨询:六西格玛对企业的作用有哪些?

热门文章

  1. nginx 打印日志格式设定
  2. 特棒特好的帖子,大实话啊
  3. 体外诊断相关介绍-博迈伦IVD原料供应商
  4. 手把手教你使用Python打造一个智能搜索淘宝商品!
  5. 掰开揉碎机器学习系列-决策树(2)-CART决策树
  6. 暑期训练DAY9(贪心)
  7. 毒蛇咬伤后的紧急处理
  8. arp攻击(arp攻击解决办法)
  9. 中国液压破碎锤行业市场供需与战略研究报告
  10. idea怎么设置为黑色背景