iOS 通讯录-获取联系人属性
内容均来自关东升老师的ios开发指南
上一篇写了联系人框架的一些必须知道的知识
如今写一下读取联系人数据相关操作
要读取通讯录数据库 须要
- 创建通讯录对象
- 查询获取数据(全部或者部分)
- 获取通讯录某一条记录(某个人的全部数据)
- 获取这个人的各种属性数据
CFErrorRef error = NULL;
//创建一个通讯录操作对象
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
第一參数是保留參数,传递NULL就可以;
//查找联系人
- (void)filterContentForSearchText:(NSString *)searchText
{
//推断授权状态
if (ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
return ;
}
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (searchText.length == 0) {
//查找全部
listContacts = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
}
else{
//依据字符串查找前缀keyword
CFStringRef cfSearchText = (CFStringRef)CFBridgingRetain(searchText);
listContacts = CFBridgingRelease(ABAddressBookCopyPeopleWithName(addressBook, cfSearchText));
CFRelease(cfSearchText);
}
//这里应该刷新表格
[self.tableView reloadData];
CFRelease(addressBook);
}
授权的状态:
kABAuthorizationStatusNotDetermined 用户还没有决定
kABAuthorizationStatusRestricted, 受限制
kABAuthorizationStatusDenied, 拒绝
kABAuthorizationStatusAuthorized 许可
联系人的属性
kABPersonFirstNameProperty; // 名字
kABPersonLastNameProperty; // 姓氏
kABPersonMiddleNameProperty; // 中间名
kABPersonPrefixProperty; // 前缀
kABPersonSuffixProperty; // 后缀
kABPersonNicknameProperty; // 昵称
kABPersonFirstNamePhoneticProperty; // 名字的汉语拼音或者音标
kABPersonLastNamePhoneticProperty; // 姓氏汉语拼音或者音标
kABPersonMiddleNamePhoneticProperty; // 中间名的汉语拼音或者音标
kABPersonOrganizationProperty; // 组织名
kABPersonJobTitleProperty; // 工作头衔
kABPersonDepartmentProperty; // 部门
kABPersonNoteProperty; // 备注
kABPersonBirthdayProperty; // 生日
kABPersonCreationDateProperty; // 创建时间
kABPersonModificationDateProperty; // 改动日期//多值属性 (一个属性中又多个值) 有标签、值、id
kABPersonPhoneProperty ; //电话号码属性 kABMultiStringPropertyType;//类型
kABPersonEmailProperty ; //e-mail属性 kABMultiStringPropertyType;//类型
kABPersonURLProperty ; //URL属性 kABMultiStringPropertyType;//类型
kABPersonRelatedNamesProperty; // 亲属关系人属性 kABMultiStringPropertyType;//类型
kABPersonAddressProperty ; //地址属性 kABMultiDictionaryPropertyType;//类型
kABPersonInstantMessageProperty;//及时聊天属性 kABMultiDictionaryPropertyType;//类型
kABPersonSocialProfileProperty; //社交账号属性 kABMultiDictionaryPropertyTypel;//类型利用上面的属性来查找想要的值
以下是单值属性:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
//从搜索出的联系人数组中获取一条数据 转换为ABRecordRef格式
ABRecordRef thisPerson = CFBridgingRetain([listContacts objectAtIndex:[indexPath row]]);
//查找这条记录中的名字
NSString *firstName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty));
firstName = firstName != nil? firstName:@"";
//查找这条记录中的姓氏
NSString *lastName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonLastNameProperty));
cell.textLabel.text = [NSString stringWithFormat:@"%@%@",firstName,lastName];
CFRelease(thisPerson);
return cell; }
以下是多值属性的查找方法:
//获取多值属性
- (void)multiValueProperty
{
ABRecordID personRecordID = [personIDASNumber intValue];//personIDASNumber是NSNumber类型的值用来保存RecordID的值
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
//通过ABRecordID属性找到ABRecord
ABRecordRef personRecord = ABAddressBookGetPersonWithRecordID(addressBook, personRecordID);
//通过ABRecord 查找多值属性
ABMultiValueRef emailProperty = ABRecordCopyValue(personRecord, kABPersonEmailProperty);
//将多值属性的多个值转化为数组
NSArray * emailArray = CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(emailProperty));
for (int index = 0; index < emailArray.count; index++) {
NSString *email = [emailArray objectAtIndex:index];
NSString *emailLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(emailProperty, index));
//推断当前这个值得标签
if ([emailLabel isEqualToString:(NSString *)kABWorkLabel]) {
NSLog(@"%@", email);
}
}
}
获取联系人图片:
//获取联系人的图片
- (void)setImage
{
CFErrorRef error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABRecordRef cecordRef = ABAddressBookGetPersonWithRecordID(addressBook,[personIDASNumber intValue]);
//推断联系人是否有照片
if (ABPersonHasImageData(cecordRef)) {
//获取照片数据
NSData *photoData = CFBridgingRelease(ABPersonCopyImageData(cecordRef));
self.imageView.image = [UIImage imageWithData:photoData];
}
}
iOS 通讯录-获取联系人属性的更多相关文章
- iOS中获取本地通讯录联系人以及汉字首字母排序
iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBo ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- iOS调用系统通讯录获取姓名电话号码(转)
原文地址:http://blog.csdn.net/idoshi201109/article/details/46007125 OS调用系统通讯录获取姓名电话号码 (iOS 8.0 Xcode6.3可 ...
- iOS 获得通讯录中联系人的所有属性--b
ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBookCopyArrayOfA ...
- ContentProvider往通讯录添加联系人和获取联系人
public class MainActivity extends Activity { private People people; private List<People> pList ...
- iOS 获取联系人,并调用系统地址簿UI
1.加入 AddressBook库 推断授权状态 -(bool)checkAddressBookAuthorizationStatus { //取得授权状态 ABAuthorizationStatus ...
- 【实用篇】获取Android通讯录中联系人信息
第一步,在Main.xml布局文件中声明一个Button控件,布局文件代码如下: <LinearLayout xmlns:android="http://schemas.android ...
- Android通讯录管理(获取联系人、通话记录、短信消息)
前言:前阵子主要是记录了如何对联系人的一些操作,比如搜索,全选.反选和删除等在实际开发中可能需要实现的功能,本篇博客是小巫从一个别人开源的一个项目抽取出来的部分内容,把它给简化出来,可以让需要的朋友清 ...
- iOS通讯录相关知识-浅析
本文来自于:贞娃儿的博客 http://blog.sina.com.cn/zhenwawaer 在开发一些应用中,我们如果需要iPhone设备中的通讯录信息.或者,需要开发通讯录相关的一些功能.那 ...
随机推荐
- HTML5 Canvas阴影用法演示
HTML5 Canvas阴影用法演示 HTML5 Canvas中提供了设置阴影的四个属性值分别为: context.shadowColor = “red” 表示设置阴影颜色为红色 context.sh ...
- Swift - 高级运算符介绍
除了基本运算符之外,Swift还支持位运算和位移运算,包括: 1,按位取反运算:操作符是 ~ 2,按位与运算:操作符是 & 3,按位或运算:操作符是 | 4,按位异或运算:操作符是 ^ 5 ...
- win32用GDI+加载png图片作为背景图
#include <windows.h> #include <gdiplus.h> /* GDI+ startup token */ ULONG_PTR gdiplusStar ...
- c++ inheritance -- 继承
c++ inheritance -- 继承 终于要决心弄明白继承了,以前仅限于大学时学习,以后工作也没有用,现在就依照(百度百科)文章写些测试的代码. 文章说 ==================== ...
- 低头看—SQL视频
迷迷糊糊半个月过去了,耿大姐的数据库视频也在一知半解中看完.虽然耿大妈讲的很详细,很细心,但是我还是时不时的犯困(还不如看儿童英语动画片有精神呢)视频看是看完了,但东西不是自己的.这个时候就需要“颗粒 ...
- Git权威指南学习笔记(二)Git暂存区
例如以下图所看到的: 左側为工作区,是我们的工作文件夹. 右側为版本号库,当中: index标记的是暂存区(stage),所处文件夹为.git/index,记录了文件的状态和变更信息. master标 ...
- 【源代码】基于Android和蓝牙的单片机温度採集系统
如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...
- VC6迁移到VS2008几个问题——良好的代码,从我做起,从现在开始。
最近.有一个项目开发,需要使用一次项目的代码.只有当项目VC6下编译通过的,在VS2008下不一定编译通过,能编译通过也不一定能链接成功.以下总结一下我在一个VC6项目移植到VS2008中遇到的一些问 ...
- java基础---->摘要算法的介绍 (转)
数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(Hash)算法. ...
- leetcode day6 -- String to Integer (atoi) && Best Time to Buy and Sell Stock I II III
1. String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully con ...