S60 通讯录开发 c++
来源:互联网 发布:pgis和js 编辑:程序博客网 时间:2024/04/29 18:03
自己封装一个引擎
// 遍历组
void CContactEngine::ReadContactGroupsL()
{
TInt count (iContactGroupArray.Count());
if ( count )
{
// 清空数组
iContactGroupArray.Reset();
}
// 得到组ID
CContactIdArray* groupIdList = iContactEngine->Database().GetGroupIdListL();
// 如果组群不为空
if( !groupIdList )
{
return;
}
CleanupStack::PushL( groupIdList );
// 组
CContactGroup* contactGroup = NULL;
const TInt nc( groupIdList->Count() );
// 抽象类
CContactItem* contact=NULL;
// 遍历每个组ID
for ( TInt i( nc-1 ); i >= 0; i-- )
{
contact = iContactEngine->Database().OpenContactL( ((*groupIdList)[i]) );
CleanupStack::PushL( contact );
//强制转换成CContactGroup
contactGroup = (CContactGroup*) contact;
// 压入组群数组
iContactGroupArray.Append(contact->Id());
iContactEngine->Database().CloseContactL( contact->Id() );
CleanupStack::PopAndDestroy( contact );
}
CleanupStack::PopAndDestroy( groupIdList );
}
// 获得所有联系人
void CContactEngine::ReadContactsL()
{
TInt count (iContactArray.Count());
if ( count )
{
// 清空数组
iContactArray.Reset();
}
// 准备遍历
CPbkContactIter* iterator = iContactEngine->CreateContactIteratorLC();
// 联系人ID
TContactItemId id;
while( ( item = iterator->NextL() ) != KNullContactId )
{
CPbkContactItem* contact = iContactEngine->OpenContactL(item);
CleanupStack::PushL(contact);
id = contact->Id();
// 推入联系人数组
iContactArray.Append(id);
// 关闭
iContactEngine->CloseContactL(contact->Id());
CleanupStack::PopAndDestroy(contact);
}
CleanupStack::PopAndDestroy(iterator);
}
// 根据联系人ID获得联系人姓名 (获得手机号码、电话号码[固话]的方法一样)
TPtrC CContactEngine::ContactLabelL(const TContactItemId& aItemId)
{
if (aItemId==KErrNotFound)
{
return NULL;
}
else
{
namebuf.Zero();
// S60封装的联系人数据格式,先设为NLL 方便调试
CContactItem* contact = NULL;
contact = iContactEngine->Database().OpenContactL( aItemId );
CleanupStack::PushL( contact );
CContactItemFieldSet& fieldSet = contact->CardFields();
HBufC* firstNameBuf = NULL;
HBufC* lastNameBuf = NULL;
// 得到名字
TInt findpos( fieldSet.Find( KUidContactFieldGivenName ) );
// 检查名字域
if ( (findpos > -1) || (findpos >= fieldSet.Count()) )
{
CContactItemField& firstNameField = fieldSet[findpos];
CContactTextField* firstName = firstNameField.TextStorage();
firstNameBuf = firstName->Text().AllocLC();
}
// 得到姓名
findpos = fieldSet.Find( KUidContactFieldFamilyName );
// 检查姓名域
if ( (findpos > -1) || (findpos >= fieldSet.Count()) )
{
CContactItemField& lastNameField = fieldSet[ findpos ];
CContactTextField* lastName = lastNameField.TextStorage();
lastNameBuf = lastName->Text().AllocLC();
}
TInt len( 0 );
if ( firstNameBuf )
{
len+=firstNameBuf->Length();
}
if ( lastNameBuf )
{
len+=lastNameBuf->Length();
}
// 创建新的缓冲并格式化
HBufC* combinedDes = HBufC::NewLC( len + KFormattersSpace );
if ( ( firstNameBuf ) && ( lastNameBuf ) )
{
combinedDes->Des().Format( KListItemFormatter,lastNameBuf,firstNameBuf );
}
else
{
if ( firstNameBuf )
{
combinedDes->Des().Format( KListOItemFormatter, firstNameBuf );
}
else if ( lastNameBuf )
{
combinedDes->Des().Format( KListOItemFormatter, lastNameBuf );
}
}
// 复制姓名
namebuf.Copy(*combinedDes);
CleanupStack::PopAndDestroy( combinedDes );
// 清理 姓、名
if ( lastNameBuf )
{
CleanupStack::PopAndDestroy( lastNameBuf );
}
if ( firstNameBuf )
{
CleanupStack::PopAndDestroy( firstNameBuf );
}
// 关闭当前联系人item
iContactEngine->Database().CloseContactL( contact->Id() );
CleanupStack::PopAndDestroy( contact );
return namebuf;
// OK 打完手工 (^_^)
}
}
// 获得组名称
TPtrC CContactEngine::GroupLabelL(const TContactItemId& aItemId)
{
if (aItemId==KErrNotFound)
{
return NULL;
}
else
{
groupLbl.Zero();
CContactGroup* contactGroup = NULL;
// 获得组对象
contactGroup = iContactEngine->ReadContactGroupL(aItemId);
// 压入清除栈
CleanupStack::PushL(contactGroup);
groupLbl.Append(contactGroup->GetGroupLabelL());
// 弹栈
CleanupStack::PopAndDestroy(contactGroup);
return groupLbl;
}
}
- S60 通讯录开发 c++
- S60 开发环境配置
- Symbian S60开发经验
- 安装S60开发包
- c 通讯录
- Symbian S60开发环境搭建
- S60 开发入门(转)
- Symbian S60开发环境搭建
- Symbian S60平台手机软件开发
- 塞班S60 开发环境建立
- S60开发教程001——S60编码惯例
- S60
- C编写的通讯录
- C编程练笔-通讯录
- 通讯录源码--C语言
- 通讯录C程序代码
- [C代码]通讯录
- C语言通讯录编写
- Hibernate知识点 002
- 1.从数据库显示所有的数据
- 马云与史玉柱经典语录
- Sql语句巧用 Like 关键字
- 修改linux环境变量的三种方法
- S60 通讯录开发 c++
- 几种不同形式的差量备份方法?
- USB过滤驱动,实现U盘只读控制
- ASP 中 Split 函数的实例
- C#正则表达式检测字符串(密码强度)
- 存储高手速成:几种常见的存储备份系统 1
- 存储高手速成:几种常见的存储备份系统 2
- 存储高手速成:几种常见的存储备份系统 3
- 【转】ABAP小游戏