收件箱里创建一条新的未读短信的操作

最近在学习MTM,看到在收件箱里创建一条新的未读短信挺好玩的,可以自己指定发件人的号码和姓名,时间等,尝试做了一下,主要碰到下面问题,记录一下:

1、开始创建成功了,但是通过收件箱里信息详情查看的时候显示的是收件人,而不是发件人,这样一看就是假的,后来查资料和请教别人,还需要对CSmsHeader进行处理,用CSmsHeader里的SetFromAddressL添加发送人的号码就可以了。

2 、发送时间问题。

开始测试的时候老是发现在模拟器里正常,而在真机里显示发送时间比设置的时候晚了八个小时,想着应该是时区的问题,后来仔细跟踪程序后发现TTime的HomeTime()函数在模拟器上得到的是UTC时间,而不是模拟器里显示的时间,而在真机上得到的是当前的本地时间,而MTM里数据包里的时间都是UTC时间,需要对当前取得的时间进行转换后,再放到数据包里就正常了。

主要代码如下:

  1.     _LIT(KAddress,"13500135000"); 
  2.     _LIT(KName,"Stone");
  3.     
  4.     
  5.     CClientMtmRegistry* iClientMtmRegistry=CClientMtmRegistry::NewL(*iSession); 
  6.     CleanupStack::PushL(iClientMtmRegistry); 
  7.     CSmsClientMtm* iSmsClientMtm=(CSmsClientMtm *)iClientMtmRegistry->NewMtmL(KUidMsgTypeSMS); 
  8.     CleanupStack::PushL(iSmsClientMtm); 
  9.     iSmsClientMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId); 
  10.     
  11.     TMsvEntry indexEntry; 
  12.     indexEntry.SetInPreparation(EFalse); 
  13.     indexEntry.iMtm = KUidMsgTypeSMS; 
  14.     indexEntry.iType = KUidMsvMessageEntry; 
  15.     indexEntry.iServiceId = iSmsClientMtm->ServiceId(); 
  16.     TTime nowTime;
  17.     nowTime.HomeTime();
  18.     
  19.     //将当前时间转换为UTC时间
  20.     TTsTime ts(nowTime,EFalse);
  21.     nowTime=ts.GetUtcTime();
  22.     //设置收到的时间
  23.     indexEntry.iDate=nowTime; 
  24.     
  25.     //设置发件人姓名
  26.     indexEntry.iDetails.Set(KName); 
  27.     
  28.     _LIT(KSMSBody,"MY first sms!"); 
  29.     indexEntry.iDescription.Set(KSMSBody); 
  30.     indexEntry.SetUnread(ETrue); 
  31.     indexEntry.SetVisible(ETrue);
  32.     iSmsClientMtm->Entry().CreateL(indexEntry); 
  33.     TMsvId iSmsId = indexEntry.Id(); 
  34.     iSmsClientMtm->SwitchCurrentEntryL(iSmsId); 
  35.     CRichText& body = iSmsClientMtm->Body();
  36.     body.Reset(); 
  37.     body.InsertL(0, KSMSBody); 
  38. //  iSmsClientMtm->AddAddresseeL(KAddress,KName); 
  39.     iSmsClientMtm->SaveMessageL(); 
  40.     
  41.     CMsvStore* messageStore = iSmsClientMtm->Entry().EditStoreL();
  42.     CleanupStack::PushL( messageStore );
  43.     CSmsHeader* hdr = CSmsHeader::NewL( CSmsPDU::ESmsDeliver, body );
  44.     CleanupStack::PushL( hdr );
  45.     hdr->SetFromAddressL(KAddress);
  46.     hdr->Deliver().SetServiceCenterTimeStamp(nowTime);
  47.      hdr->StoreL(*messageStore);       
  48.      messageStore->CommitL();
  49.      CleanupStack::PopAndDestroy(hdr);     
  50.      CleanupStack::PopAndDestroy(messageStore);
  51.     // 修改当前消息索引为只读,这样收件箱列表处浏览会有回复选项
  52.     //但是如果在之前就设置ReadOnly就会导致SaveMessageL出错  
  53.     indexEntry.SetReadOnly(ETrue);
  54.     //消息索引提交更改
  55.     iSmsClientMtm->Entry().ChangeL(indexEntry); 
  56.     CleanupStack::PopAndDestroy(2);     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值