Symbian Security Studio

About symbian software programming ,security analysis and other things about symbian.

Thursday, May 10, 2007

用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

Labels:

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home