用C++实现的访问Symbian手机电话薄

 

在Symbian OS中,电话薄部分是通过一个默认的数据库(contacts.cdb.)来操作和管理的。因此在Symbian系统里可以用联系人模型(Contacts Model)API来访问和管理电话薄,这里主要用的类就是CContactDatabase(数据库类,电话薄所有条目的集合),CContactItem(它代表一个单独的电话薄条目,由唯一的一个TContactItemId标识。例如电话薄中的一个联系人),CContactItemField(域类,每一个电话薄条目有很多类组成,例如姓名域(EPbkFieldIdFirstName,EPbkFieldIdLastName),电话号码域(EPbkFieldIdPhoneNumberGeneral)...).
而Series60开发者则扩展了这一模型,使用“电话薄引擎”;下面是几个关键的类。

Class CPbkContactEngine

电话薄引擎通过CPbkContactEngine来实现。如果已经存在一个缺省数据库,CPbkContactEngine::NewL()就连接到该数据库,否则创建该数据库。

Class CPbkContactItem

CPbkContactItem类代表电话薄数据库中的一个具体条目,例如一个联系人。它提供了对所拥有的TPbkContactItemField数组的访问和查找函数。

Class TPbkContactItemField

TPbkContactItemField是某个电话薄条目的域类,例如某人的电话域,或者某人的电子邮件。

//关于电话薄引擎的具体知识还是参看SDK的help吧。

//呵呵,下面把访问电话薄的一段代码贴出来,希望大家多指正。

void CPhoneEngine::DisplayContactInfoL(MObjectProvider* aMopParent)
{
   
     RPbkViewResourceFile  phonebookResource( *(CEikonEnv::Static())  );

    if ( !phonebookResource.IsOpen())
        {
        phonebookResource.OpenL();
        }

     // Add searching array to parameters
     CContactDatabase::TContactViewFilter filter(CContactDatabase::EPhonable);
     CPbkMultipleEntryFetchDlg::TParams params;
     params.iContactView = &iPbkContactEngine->FilteredContactsViewL( filter );
   
     // Launch fetching dialog
     CPbkMultipleEntryFetchDlg* fetchDlg = CPbkMultipleEntryFetchDlg::NewL( params,  *iPbkContactEngine );
     fetchDlg->SetMopParent( aMopParent ); 
     TInt okPressed = fetchDlg->ExecuteLD();
     CleanupStack::PushL( params.iMarkedEntries );

     if ( okPressed )
      {

        // Get the first selected contacts id array
        const TContactItemId cid = ( *params.iMarkedEntries )[0];
           
        // Open the selected contact using Phonebook engine,
        CPbkContactItem* pbkItem = iPbkContactEngine->ReadContactLC( cid );
  
       //get the first name
        TPbkContactItemField* fnameField = pbkItem->FindField(EPbkFieldIdFirstName);
        fnameField->GetTextL(iFirstName);

      // get the last name  
     TPbkContactItemField* lnameField = pbkItem->FindField(EPbkFieldIdLastName);
     lnameField->GetTextL(iLastName);
  
     // get the General PhoneNumber
     TPbkContactItemField* phoneFieldGeneral = pbkItem->FindField(EPbkFieldIdPhoneNumberGeneral);
        phoneFieldGeneral->GetTextL(iNumberGeneral);

     // get the Mobile PhoneNumber
    TPbkContactItemField* phoneFieldMobile = pbkItem->FindField(EPbkFieldIdPhoneNumberMobile);
     phoneFieldMobile->GetTextL(iNumberMoblie);

     //get the email address
    TBuf<30> emailAddress;
     TPbkContactItemField *eMailField=pbkItem->FindField(EPbkFieldIdEmailAddress);
     eMailField->GetTextL(emailAddress);
  

     // add codes to get other fields you interested in

     //......


     CleanupStack::PopAndDestroy(pbkItem);  // pbkItem, eMailAdd
 }

    //release the resource
    CleanupStack::PopAndDestroy();  // iMarkedEntries
   phonebookResource.Close();    // Close the phonebook view

你可能感兴趣的:(用C++实现的访问Symbian手机电话薄)