ios 简书 获取通讯录信息_iOS9以后获取手机通讯录
一、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以后获取手机通讯录相关推荐
- Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等
一.工具:psutil模块 psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况:可以使用我们学习知识与这模块用来做系统监控,性能分析:如果大家熟悉Lin ...
- android获取电池信息;android获取电池容量、技术、电压、电量、温度等信息
android获取电池信息:android获取电池容量.技术.电压.电量.温度等信息 1.这里我仅展示工具类,需要注意的是这里的部分值要刷新后才能显示,添加刷新UI的方法即可,而且电量温度等都是变化的 ...
- android获取GPU信息;android获取GPU渲染器、供应商、版本和扩展名等信息
android获取GPU信息:android获取GPU渲染器.供应商.版本和扩展名等信息 效果: 1.布局文件 <?xml version="1.0" encoding=&q ...
- android 通讯录备份 导入苹果手机,安卓手机通讯录怎么导入苹果手机? 手机通讯录怎么恢复导出...
安卓手机通讯录怎么导入苹果手机?手机通讯录怎么恢复导出?对于手机数据被删的情况,真的是来去匆匆,不带走一点遗憾.轻轻的触碰联系人的删除键就可以把联系人联系方式进行清空了,那么应该如何恢复呢? 现在如此 ...
- android手机通讯录格式转换,手机通讯录小技巧,安卓手机通讯录转iPhone并不难,换机必学...
原标题:手机通讯录小技巧,安卓手机通讯录转iPhone并不难,换机必学 今年618年中大促销,国内的电商巨头们分分大减价,就连号称保价的苹果手机,过万iPhone XS MAX都跌入八千户里.相信很多 ...
- ios 简书 获取通讯录信息_ios 各种权限整理
联网权限 引入头文件 @import CoreTelephony; 应用启动后,检测应用中是否有联网权限 CTCellularData *cellularData = [[CTCellularData ...
- ios 简书 获取通讯录信息_当心!你用的共享充电宝可能被植入木马盗取信息
出门在外,你的焦虑感是否会随着手机电量的降低而同步提高呢?乘车.支付.娱乐.联系都离不开手机,一旦没了电简直要丢掉半条命.这个时候遍布大街小巷的共享充电宝简直成了救命稻草.然而在你放心使用共享充电宝时 ...
- java微信获取用户信息_SpringBoot中获取微信用户信息的方法
前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...
- mysql获取配置文件信息,四种获取MySQL数据库配置文件加载顺序
简介 有时候帮人排查一下MySQL数据库问题的时候,用ps -ef查看MySQL数据库进程的时候,竟然不显示配置的相关信息. 如果想看MySQL数据库的配置,就会一头雾水,于是就特地整理了一下,4种查 ...
最新文章
- spark—3(Spark Scheduler)
- hibernate 逆向工程
- DOM中setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
- C#实现POST提交方式
- 极域电子书包课堂管理系统_【君莲微讯】君莲学校(小学部)开展电子书包第13共同体数学研讨活动...
- 转-- iOS 30多个iOS常用动画,带详细注释
- Linux系统编程---6(信号的机制,信号4要素,Linu常规信号表,定时器)
- 醒醒吧,这世界上根本没有稳定的工作
- java rpg对战_java实现模拟RPG格斗
- 应用密码学:单表代替密码简单介绍
- 基于深度学习的行人检测技术
- 记一次千人大项目的感受
- VC/MFC如何设置对话框、static背景颜色
- C#图片加载与内存释放
- BUGKU--web详解
- 湿气重会有哪些表现?如何祛湿
- 人工智能基础——什么是智能(智能的特征)
- Servlet文件下载例子详解及response的contentType类型大全
- 坦克小战的游戏规则说明(3)
- 张驰咨询:六西格玛对企业的作用有哪些?