Symbian OS 应用开发实例之通讯录(电话薄Contacts)
2010-08-11 12:12:00 来源:WEB开发网if(iFinder->IsComplete())
{
if(iFinder->Error() == KErrNone)
{
CContactIdArray* result = iFinder->TakeContactIds();
CleanupStack:: PushL(result);
for(TInt i=0; iCount(); i++)
{
TContactItemId cardId = (*result)[i];
CContactItem* ownCard = iContactsDb ->OpenContactL(cardId);
CleanupStack::PushL(ownCard);
TInt index =
ownCard->CardFields().Find(KUidContactFieldGivenName);
ownCard->CardFields()[index].TextStorage()->SetTextL(KOtherForename);
//提交所做的修改,如果这里不做更改可以调用CloseContactL直接关闭
//但是一旦用OpenContactL或 OpenContactLX打开就必须调用两者之一关闭
iContactsDb ->CommitContactL(*ownCard);
CleanupStack::PopAndDestroy();// ownCard
}
CleanupStack::PopAndDestroy();//result;
}
}
CleanupStack::PopAndDestroy(3);// iContactsDb、iFieldDef、iFinder
例6、 导出所选通讯录条目到文件(vCard)
在这里,主要使用CContactDatabase类中 ExportSelectedContactsL函数,关于该函数的定义可以查看SDK文档;而且在这里与前次遍历不一样的是,加了一个过滤器 CCntFilter类,虽然取法仍然是所有通讯条目,但做法不一样,具体例程如下:
RFs fileSession;
// 连接文件服务器
User::LeaveIfError(fileSession.Connect());
CleanupClosePushL(fileSession); //1
//打开默认数据库
CContactDatabase* contactDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactDb); //2
//新建过滤器
CCntFilter* filter = CCntFilter::NewLC(); //3
filter->SetContactFilterTypeALL(EFalse);
//按vCard格式导出
filter->SetContactFilterTypeCard(ETrue);
// 安装filter
contactDb->FilterDatabaseL(*filter);
//取出满足条件的记录数据项数组
更多精彩
赞助商链接