在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
}
//註:轉貼或引用以上內容請註明出處!