遍历通讯录的一个问题?
// 打开默认通讯录数据库
CContactDatabase* pDb = CContactDatabase::OpenL();
if(!pDb)
{
return;
}
CleanupStack::PushL(pDb);
TContactIter pIter(*pDb);
TContactItemId cardId;
TContactItemInfo itemInfo;
// 循环遍历
while( ( cardId = pIter.NextL() ) != KNullContactId )
{
// 读取相应项,这里之所以称其card,就是其实际相当于读一个完整的vCard条目
// 调用者拥有pCard的Ownship
CContactItem* pCard = pDb->ReadContactL(cardId);
if(!pCard)
{
continue;
}
CleanupStack::PushL(pCard);
// 读取联系人信息
...
// 关闭一个联系条目
pDb->CloseContactL(pCard->Id());
CleanupStack::PopAndDestroy(pCard); // pCard
}
CleanupStack::PopAndDestroy(pDb); // pDb
以上是使用代码,但是在Nokia E52 / Nokia N95 上测试时,多出现二个联系人,联系人的姓名为一大串字母与数字
但是在Nokia 5230上测试的时侯,就没有多出二个联系人的信息。
多出现的联系人的ID(TContactItemId )分别为1,2,其它为331,332...等。
还有我用
CContactItem* pCard
if(!pCard->IsHidden() && !pCard->IsSystem())
进行判断时,还是有那两联系人。
[解决办法]
有没有那们老兄知道啊。
帮自己顶一下。
[解决办法]
if(pCard->Type().iUid & CCntFilter::EContactTemplates)
已经解决,判断一下类型。