用C++實現的訪問Symbian手機電話薄

來源:互聯網
上載者:User

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

//註:轉貼或引用以上內容請註明出處!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.