新建一个CContact类用于存放联系人信息,下面是该类的代码:
CContact.h代码:
01 |
#import <Foundation/Foundation.h> |
04 |
@interface CContact : NSObject |
06 |
@property (nonatomic,strong) NSString * firstName; |
07 |
@property (nonatomic,strong) NSString * lastName; |
08 |
@property (nonatomic,strong) NSString * compositeName; |
09 |
@property (nonatomic,strong) UIImage * image; |
10 |
@property (nonatomic,strong) NSMutableDictionary * phoneInfo; |
11 |
@property (nonatomic,strong) NSMutableDictionary * emailInfo; |
12 |
@property (nonatomic,assign) int recordID; |
13 |
@property (nonatomic,assign) int sectionNumber; |
16 |
//-(NSString *)getFirstName; |
17 |
//-(NSString *)getLastName; |
18 |
-(NSString *)getFisrtLetterForCompositeName; |
CContact.m文件代码:
05 |
// Created by Carl on 13-6-28. |
06 |
// Copyright (c) 2013年 contact..com. All rights reserved. |
12 |
@implementation CContact |
18 |
[_compositeName release]; |
36 |
-(NSMutableDictionary *)phoneInfo |
40 |
_phoneInfo = [[NSMutableDictionary alloc] init]; |
47 |
-(NSMutableDictionary *)emailInfo |
51 |
_emailInfo = [[NSMutableDictionary alloc] init]; |
下面是一个自定义函数,用于取得所有联系人信息。
002 |
-(NSMutableArray *)allContacts |
008 |
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; |
010 |
NSArray * contacts = (NSArray *)ABAddressBookCopyArrayOfAllPeople(self.addressBook); |
013 |
// if([_allContacts retainCount] > 0) [_allContacts release]; |
015 |
_allContacts = [[NSMutableArray alloc] init]; |
018 |
int contactsCount = [contacts count]; |
020 |
for ( int i = 0; i < contactsCount; i++) |
022 |
ABRecordRef record = (ABRecordRef)[contacts objectAtIndex:i]; |
023 |
CContact * contact = [[CContact alloc] init]; |
025 |
CFStringRef firstNameRef = ABRecordCopyValue(record, kABPersonFirstNameProperty); |
026 |
contact.firstName = (NSString *)firstNameRef; |
027 |
CFStringRef lastNameRef = ABRecordCopyValue(record, kABPersonLastNameProperty); |
028 |
contact.lastName = (NSString *)lastNameRef; |
029 |
CFStringRef compositeNameRef = ABRecordCopyCompositeName(record); |
030 |
contact.compositeName = (NSString *)compositeNameRef; |
032 |
firstNameRef != NULL ? CFRelease(firstNameRef) : NULL; |
033 |
lastNameRef != NULL ? CFRelease(lastNameRef) : NULL; |
034 |
compositeNameRef != NULL ? CFRelease(compositeNameRef) : NULL; |
037 |
contact.recordID = ( int )ABRecordGetRecordID(record); |
042 |
if (ABPersonHasImageData(record)) |
044 |
// NSData * imageData = ( NSData *)ABPersonCopyImageData(record); |
045 |
NSData * imageData = (NSData *)ABPersonCopyImageDataWithFormat(record,kABPersonImageFormatThumbnail); |
046 |
UIImage * image = [[UIImage alloc] initWithData:imageData]; |
050 |
contact.image = image; |
058 |
ABMultiValueRef phones = ABRecordCopyValue(record, kABPersonPhoneProperty); |
059 |
for ( int i = 0; i < ABMultiValueGetCount(phones); i++) |
062 |
CFStringRef phoneLabelRef = ABMultiValueCopyLabelAtIndex(phones, i); |
063 |
CFStringRef localizedPhoneLabelRef = ABAddressBookCopyLocalizedLabel(phoneLabelRef); |
064 |
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, i); |
066 |
NSString * localizedPhoneLabel = (NSString *) localizedPhoneLabelRef; |
067 |
NSString * phoneNumber = (NSString *)phoneNumberRef; |
069 |
[contact.phoneInfo setValue:phoneNumber forKey:localizedPhoneLabel]; |
072 |
phoneLabelRef == NULL ? : CFRelease(phoneLabelRef); |
073 |
localizedPhoneLabelRef == NULL ? : CFRelease(localizedPhoneLabelRef); |
074 |
phoneNumberRef == NULL ? : CFRelease(phoneNumberRef); |
077 |
if (phones != NULL) CFRelease(phones); |
080 |
ABMultiValueRef emails = ABRecordCopyValue(record, kABPersonEmailProperty); |
081 |
for ( int i = 0; i < ABMultiValueGetCount(emails); i++) |
084 |
CFStringRef emailLabelRef = ABMultiValueCopyLabelAtIndex(emails, i); |
085 |
CFStringRef localizedEmailLabelRef = ABAddressBookCopyLocalizedLabel(emailLabelRef); |
086 |
CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, i); |
088 |
NSString * localizedEmailLabel = ( NSString *)localizedEmailLabelRef; |
090 |
NSString * email = (NSString *)emailRef; |
092 |
[contact.emailInfo setValue:email forKey:localizedEmailLabel]; |
094 |
emailLabelRef == NULL ? : CFRelease(emailLabelRef); |
095 |
localizedEmailLabel == NULL ? : CFRelease(localizedEmailLabelRef); |
096 |
emailRef == NULL ? : CFRelease(emailRef); |
099 |
if (emails != NULL) CFRelease(emails); |
102 |
[_allContacts addObject:contact]; |
109 |
return [_allContacts autorelease]; |
- iOS访问通讯录开发-读取联系人信息
读取通信录中的联系人一般的过程是先查找联系人记录,然后再访问记录的属性,属性又可以分为单值属性和多值属性.通过下面例子介绍联系人的查询,以及单值属性和多值属性的访问,还有读取联系人中的图片数据. 本案 ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- IOS 获取通讯录中信息
获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...
- Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Android 手机卫士--获取联系人信息并显示与回显
前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...
- android之读取联系人信息
联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...
- php课程---练习(联系人信息表)
做一个联系人表,实现增删改功能 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...
随机推荐
- windows批处理总结
rem echo off 表示之后所有命令行不显示,但命令结果总是会显示的!! 不存在%ROOT_DIR% . %CUR_DIR%的变量 rem @表示命令行不显示当前行,但命令结果总是会显示的!! ...
- JS实现无限分页加载——原理图解
由于网页的执行都是单线程的,在JS执行的过程中,页面会呈现阻塞状态.因此,如果JS处理的数据量过大,过程复杂,可能会造成页面的卡顿.传统的数据展现都以分页的形式,但是分页的效果并不好,需要用户手动点击 ...
- salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)
上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件 ...
- 安卓中的数据存储方式以及ContentProvider的简单介绍
1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储 2.请介绍下ContentPr ...
- 数组的一个强大函数splice,[增,删,改]
// var a = [1,2,3]; // a.splice(0); // console.log(a); >>[] // a.splice(1); // console.log(a); ...
- sys.dm_db_wait_stats
sys.dm_db_wait_stats 返回在操作期间执行的线程所遇到的所有等待的相关信息. 可以使用此聚合视图来诊断 Azure SQL Database 以及特定查询和批处理的性能问题. 执行查 ...
- 单机redis 主从实例
环境windows xp sp3 1.redis 安装 redis windows安装文件下载地址:http://code.google.com/p/servicestack/wiki/RedisWi ...
- Android如何避免切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题
1.最近的项目中,有一个Activity用到Fragment+ViewPager,其中一个fragment中实现了视频播放的功能,包含有SurfaceView.结果,每次打开程序第一次进入到该Acti ...
- JavaScript及兼容性笔记
1. Json to String JSON.stringify(jsonobj)//(IE8+,Chrome 1+,FF 3+) //参考 http://www.nowamagic.net/libr ...
- MAPPING SEGMENTS TO PAGES
The segmentation and paging mechanisms provide in the support a wide variety of approaches to memory ...