在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