其中設定和讀取連絡人頭像有兩種方法
1、通過系統方法設定
其中要有2個參數 1、UIImage 2、連絡人電話號碼
extern "C" ABRecordRef ABCFindPersonMatchingPhoneNumber(ABAddressBookRef addressBook,NSString *phoneNumber,int, int);
ABAddressBookRef addressbook = ABAddressBookCreate();
ABRecordRef ref1 = ABCFindPersonMatchingPhoneNumber(addressbook, pn, 0, 0);
int record = ABRecordGetRecordID(ref1);//擷取聯絡人的recordId
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressbook, record);//擷取聯絡人的ABRecordRef
/////////////////////////////////////////////////////////////////
設定聯絡人圖片
UIImage * img = [UIImage imageNamed:@"image.png"];
NSData *dataRef = UIImagePNGRepresentation(img);
ABPersonSetImageData(person, (CFDataRef)dataRef, nil);
ABAddressBookAddRecord(addressbook, person, nil);
ABAddressBookSave(addressbook, nil);
CFRelease(addressbook);//create、copy、retrain對應的release
////////////////////////////////////////////////////////////////
讀取系統聯絡人圖片
CFDataRef dataRef = ABPersonCopyImageData(person);
UIImage *image = [UIImage imageWithData:(NSData *)dataRef];//這個就是我們要擷取的Image的值
[dataRef release];
注意:用系統方法插入的操作在資料庫中儲存的時候只會儲存縮圖的形式
相當於在資料庫中的格式format為0 fromat(分為3中 0為縮圖 1、大號縮圖 2、源圖)
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
使用讀取資料庫的方法來讀取 (這裡就只說讀取,具體的插入也類似)
#define DBNAME "/var/mobile/Library/AddressBook/AddressBookImages.sqlitedb"
-(UIImage *) getSystemImage:(int)record_id formatImg:(int) format
{
sqlite3*m_db;
UIImage *image = nil;
int m_errno;
NSData* dataObj = nil;
m_errno=sqlite3_open(DBNAME,&m_db);
if (m_db==NULL) {
return nil;
}
int len;
char *next;
sqlite3_stmt *st;
char sql[256];
sprintf(sql,"select data from ABImage where record_id = %d and format = %d",record_id, format);
len = strlen(sql);
m_errno = sqlite3_prepare(m_db, (const char *)sql, len, &st, (const char **)&next);
if (m_errno != SQLITE_OK)
{
return nil;
}
m_errno = sqlite3_step(st);
if(m_errno == SQLITE_ROW)
{
int length = sqlite3_column_bytes(st, 0);
const unsigned char*pData = sqlite3_column_text(st, 0);
dataObj = [NSData dataWithBytes:pData length:length];
}
image = [UIImage imageWithData:dataObj];
sqlite3_finalize(st);
sqlite3_close(m_db);
return image;
}