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;
           }
}

 

 

原创粉丝点击