系统名片夹的操作

来源:互联网 发布:c语言程序员 编辑:程序博客网 时间:2024/06/10 11:40

//是把名片夹以窗口的方式打开。

//#include <cpbkviewstate.h>
//ReadDeviceData WriteDeviceData
//PbkView.lib

void CLEDPointAppUi::OpenInfraredL()
    {
    
    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    pbkViewParam->SetFocusedContactId(0);
    // Package and return object in a buffer.
    HBufC8* paramBuf = pbkViewParam->PackLC();
    //名片夹的UID
    const TUid appUid =
        {
        0x101f4cce
        };
    //打开页面
    CCoeAppUi::ActivateViewL(TVwsViewId(appUid, TUid::Uid(1)),
            CPbkViewState::Uid(), *paramBuf);
    // Cleanup
    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewParam
    }








名片中字段对应的枚举值

EPbkFieldIdLastName 姓

EPbkFieldIdFirstName 名

EPbkFieldIdPhoneNumberMobile 手机号

EPbkFieldIdPhoneNumberStandard 电话号码

EPbkFieldIdEmailAddress 电子邮件

EPbkFieldIdCompanyName 公司

EPbkFieldIdJobTitle 职位

EPbkFieldIdFaxNumber 传真



//----------------------------------------打开名片夹窗口----------------------------------------

    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    pbkViewParam->SetFocusedContactId(0);    //这个是在本窗口设置选中的ID
    // Package and return object in a buffer.
    HBufC8* paramBuf = pbkViewParam->PackLC();
    //名片夹的UID
    const TUid appUid =
        {
        0x101f4cce
        };

    //打开页面
    CCoeEnv::Static()->AppUi()->ActivateViewL(TVwsViewId(appUid, TUid::Uid(1)),
            CPbkViewState::Uid(), *paramBuf);

    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewParam


//----------------------------------------创建一条新名片----------------------------------------

    //其中iPbkContactEngine是类的成员变量
    //通讯录
    //iPbkContactEngine = CPbkContactEngine::NewL();
   

    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

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

    CPbkContactItem* contactItem = iPbkContactEngine->CreateEmptyContactL();
    CleanupStack::PushL(contactItem);

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, ETrue);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    phonebookResource.Close();




//----------------------------------------创建一条新的名片,设置默认的字段----------------------------------------

    //其中iPbkContactEngine是类的成员变量
    //通讯录
    //iPbkContactEngine = CPbkContactEngine::NewL();


    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

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

    CPbkContactItem* contactItem = iPbkContactEngine->CreateEmptyContactL();
    CleanupStack::PushL(contactItem);
   
    //设置字段的内容
    TPbkContactItemField* fieldFirstName = contactItem->FindField(EPbkFieldIdFirstName);
    fieldFirstName->TextStorage()->SetTextL(_L("Costya"));

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, ETrue);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    phonebookResource.Close(); // Close the phonebook view


//----------------------------------------修改一个名片----------------------------------------


    //获取记录的TContactItem Id
    TContactItemId tId = iAllRecord[aId]->iRecordID;

    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

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

    CPbkContactItem* contactItem = iPbkContactEngine->OpenContactL(tId);
    CleanupStack::PushL(contactItem);

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, EFalse);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    iPbkContactEngine->CloseContactL(tId);
    phonebookResource.Close();
   


//----------------------------------------查找一个名片----------------------------------------
    //获取联系人通讯录TContactItemId
    TContactItemId tID = iAllRecord[aId]->iRecordID;

    CPbkContactItem* pContactItem = iPbkContactEngine->OpenContactL(tID);

    //记录集为空就执行下一条记录
    if (pContactItem == NULL)
        {
        return;
        }

    //如果不是查找的记录,就执行下一行
    if (tID != pContactItem->Id())
        {
        return;
        }

    //是查找的记录,下面开始组装名片字符串
    TPbkContactItemField* pCntField;
    TBuf<500> bValue;
    TBuf<100> bName;

    //得到姓
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdLastName);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_FIRST_NAME);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }

    //得到名称
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdFirstName);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_LAST_NAME);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }

    //得到手机号
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdPhoneNumberMobile);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_PHONE);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }
    delete pContactItem;
    pContactItem = NULL;

    iPbkContactEngine->CloseContactL(tID);

    //到此,bCard中就是获取名片的信息了。



//----------------------------------------当名片夹有变化的时候----------------------------------------
class CControl : public CBase,
             public MPbkContactDbObserver
{

public:
      //当通讯录有变化的时候,系统就会自动调用此函数
      virtual void HandleDatabaseEventL(TContactDbObserverEvent aEvent);

 private:
      //通讯录引擎
      CPbkContactEngine* iPbkContactEngine;

      //通讯录监控类
      CPbkContactChangeNotifier* iPbkContactNotifier;

}




void CXXX::ConstructL()
{
         //创建通讯录引擎
    iPbkContactEngine = CPbkContactEngine::NewL();

        //创建事件通知类
    iPbkContactNotifier = CPbkContactChangeNotifier::NewL(*iPbkContactEngine, this);

}



void CXXX::HandleDatabaseEventL(TContactDbObserverEvent aEvent)
{
        // The changed item.
    TContactItemId contactId = aEvent.iContactId;

    switch (aEvent.iType)
    {
        //当修改通讯录的时候
        case EContactDbObserverEventContactChanged:
        {
               
        break;
        }
        //删除通讯录的时候       
        case EContactDbObserverEventContactDeleted:
        {
        break;
        }
        //添加通讯录的时候
        case EContactDbObserverEventContactAdded:
        {
        break;
        }
        default:
        {
        }
        break;
    }
}



//----------------------------------------打开某一个联系人的详情页面----------------------------------------
    //获取记录的TContactItem Id
    TContactItemId tId = //名片的TContactItem

    const TUid appUid =
        {
        0x101f4cce
        };
    const TUid KExtViewUid =
        {
        4
        }; // 对应信息页面的view uid
    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    TInt contact_id = tId;
    pbkViewParam->SetFocusedContactId(contact_id);
    HBufC8* paramBuf = pbkViewParam->PackLC();
    CCoeEnv::Static()->AppUi()->ActivateViewL(TVwsViewId(appUid, KExtViewUid), CPbkViewState::Uid(),
            *paramBuf);
    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewPara



//---------------------在通讯录中,当一个人有多个手机的时候,拨打此人的电话,就弹出电话号码选择框。-------------------------------

    RPbkViewResourceFile pbkViewResourceFile(*CCoeEnv::Static());
    pbkViewResourceFile.OpenL();

    const TContactItemId cid = //获取通讯录中的ID;

    TBuf<128> phoneNumber;
    TBuf<128> phoneName;
    TBool namefound = EFalse;
    CPbkContactItem* pbkItem = iPbkContactEngine->ReadContactLC(cid);

    CPbkPhoneNumberSelect* dlg = new (ELeave) CPbkPhoneNumberSelect();
    CPbkPhoneNumberSelect::TParams addparams(*pbkItem);
    TBool selected = dlg->ExecuteLD(addparams);

    if (selected)
        {
        //得到选择的字段,如移动、移动(办公)、电话、家庭电话,通过numtmp->Label()你能找到额外的字段标签
        const TPbkContactItemField* numtmp = addparams.SelectedField();
        if (numtmp)
            {
            phoneNumber = numtmp->Text();
            }
        TPbkContactItemField* nametmp;
        if ((nametmp = pbkItem->FindField(EPbkFieldIdFirstName)) != NULL)
            {
            phoneName = nametmp->Text();
            if (phoneName.Length() > 0)
                {
                namefound = ETrue;
                }
            }
        if ((nametmp = pbkItem->FindField(EPbkFieldIdLastName)) != NULL)
            {
            if (namefound)
                {
                phoneName.Append(_L(" "));
                phoneName.Append(nametmp->Text());
                }
            else
                {
                phoneName = nametmp->Text();
                }
            }
        }
    CleanupStack::PopAndDestroy(1);//CPbkContactItem
    pbkViewResourceFile.Close();

    //如果有电话,就打电话
    if (0 < phoneNumber.Length())
        {
        //到现在,phoneNumber中就是选中的电话号码。
        }

原创粉丝点击