〔分享〕如何在收件箱创建短信

来源:互联网 发布:网络语蜡烛是什么意思 编辑:程序博客网 时间:2024/05/23 19:20

 〔分享〕如何在收件箱创建短信----by cxt_programmer
// Author: Liguopeng & Chenxiaotian
// aAddr[in]: addresser number
// aContent[in]: sms content
void CSmsMonitorEngine::CreateNewMessageL(const TDesC& aAddr, const TDesC& aContent)
{
        const TInt LEN = 12;

        //================================================================
        //        新的代码
        //================================================================       
        iSmsMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId); //test!

        TMsvEntry newIndexEntry;
        newIndexEntry.iDate.HomeTime();
        // 短信还未创建完成
        newIndexEntry.SetInPreparation(ETrue);
        // This is an SMS message
        newIndexEntry.iMtm = KUidMsgTypeSMS;
        newIndexEntry.iType = KUidMsvMessageEntry;

        newIndexEntry.iDetails.Set(aAddr);
        newIndexEntry.iDescription.Set(aContent.Left(LEN));

        newIndexEntry.SetSendingState(KMsvSendStateNotApplicable);
        newIndexEntry.SetUnread(ETrue);
        newIndexEntry.SetNew(ETrue);

        //in 3rd edition crashes here if capabilities are wrong
        newIndexEntry.iServiceId = iSmsMtm->ServiceId();

        //pID = (TInt*)&newIndexEntry;
        //*(pID+2) = 0x120021;
        iSmsMtm->Entry().CreateL(newIndexEntry);

        TMsvId smsId = newIndexEntry.Id();
        iSmsMtm->SwitchCurrentEntryL(smsId);
        iSmsMtm->Entry().ChangeL(newIndexEntry);
            iSmsMtm->SaveMessageL();

        /*--------------------------------------------
        // 重写 header
        //------------------------------------------*/
        CRichText* richText = CRichText::NewL(CEikonEnv::Static()->SystemParaFormatLayerL(), CEikonEnv::Static()->SystemCharFormatLayerL());
        CleanupStack::PushL(richText);
        richText->InsertL(0, aContent);

        CSmsHeader* mySmsHeader = CSmsHeader::NewL(CSmsPDU::ESmsDeliver,*richText);
        CleanupStack::PushL(mySmsHeader);

        CMsvEntry* tmpEntry = iMsvSession->GetEntryL(newIndexEntry.Id());
        CleanupStack::PushL(tmpEntry);
        if ( tmpEntry->HasStoreL() )
        {
                mySmsHeader->SetFromAddressL(aAddr);

                CMsvStore* store = tmpEntry->EditStoreL();
                CleanupStack::PushL(store);

                // 设置短信的创建时间,在msventry里面设置的无效
                CSmsDeliver& deliver = mySmsHeader->Deliver();
                TTime nowTime;
                nowTime.HomeTime();
                deliver.SetServiceCenterTimeStamp(nowTime);

                mySmsHeader->StoreL(*store);
                store->StoreBodyTextL(*richText);

                store->CommitL();
                CleanupStack::PopAndDestroy(store);
        }

        // 不能save,否则不是缺主题,就是缺正文
        // iSmsMtm->SaveMessageL();

        TMsvEntry tttEntry =  iSmsMtm->Entry().Entry();
        // 创建完成
        tttEntry.SetInPreparation(EFalse);
        // 不设置只读,在收件箱列表处浏览没有回复选项
        tttEntry.SetReadOnly(ETrue);

        iSmsMtm->Entry().ChangeL(tttEntry);
        CleanupStack::PopAndDestroy(3, richText); // tmpEntry, mySmsHeader, richText

        //delete iSmsMtm;
        //iSmsMtm = NULL;
        //delete iMtmRegistry;
        //iMtmRegistry = NULL;
        //delete iMsvSession;
        //iMsvSession = NULL;

        return;
}
cxt_programmer 大大的代码,有人要就发了一下,希望cxt_programmer 能谅解

原创粉丝点击