`
DevDiv.net
  • 浏览: 23403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Symbian创建短信(Create local sms)

阅读更多
作者: Mark15021
此文转载于我的BLOG:http://blog.sina.com.cn/wentaowu
DevDiv原贴地址:http://www.devdiv.net/thread-7987-1-1.html

今天研究了一下创建本地短信的问题。在SYMBIAN平台创建短信经常会遇到以下二个问题。
1.创建完短信后不能回复。呵呵
2.创建完短信后,短信详情的时间不对。通常在模拟器上会早8个小时,在真机上会晚8个小时。


我们今天主要讨论第二个问题。呵呵。
首先我做了如下的实验来验证为什么会晚8个小时,我把真机上的时区改成伦敦时区。再
创建短信后。时间是对的。我晕。估计是因为我真机上的北京时间和伦敦相差8个小时的原因。

即然我们差不多得到了错误的原因。把时差加上不就OVER了吗?好让我们来看看如何处理吧。

void CtestCAtive::CreateNewMessageL(const TDesC& aAddr, const TDesC& aContent)

{
    const TInt LEN = 12;
    TBuf<32> tempAddr;
    //tempAddr.Append(_L("+86"));
    tempAddr.Append(aAddr);
    iSmsMtm->SwitchCurrentEntryL(KMsvGlobalInBoxIndexEntryId); //test!

    TMsvEntry newIndexEntry;
   
    TTime bTime;
    bTime.UniversalTime();
    newIndexEntry.iDate = bTime;//注意这里,必须使用UniversalTime。
    //如果使用HOMETIME就有问题。在第三版上标准时间是用UniversalTime。呵呵。SYMBIAN变态吧
    // 短信还未创建完成
    newIndexEntry.SetInPreparation(ETrue);
    // This is an SMS message
    newIndexEntry.iMtm = KUidMsgTypeSMS;
    newIndexEntry.iType = KUidMsvMessageEntry;

    newIndexEntry.iDetails.Set(tempAddr);
    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();

    iSmsMtm->Entry().CreateL(newIndexEntry);

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

  

    richText->Reset();
    richText->InsertL(0, aContent);

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

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

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

        // 设置短信的创建时间,在msventry里面设置的无效
      
        //以下是取得当前手机设置的时差
        TLocale locale;
        TTimeIntervalSeconds universalTimeOffset(locale.UniversalTimeOffset());
        TInt tempTime = universalTimeOffset.Int();
        //注意这里。NOKIA论坛上给的是除以900,除以900我在真机上测试过是有问题的。
        TInt numQuarterHours = universalTimeOffset.Int() / 3600;
      
        CSmsPDU *pdu=&mySmsHeader->Message().SmsPDU();
        CSmsDeliver *dpdu=STATIC_CAST(CSmsDeliver*,pdu);
      
        TTime aTime;
        aTime.UniversalTime();
        //注意这里必须用UniversalTime.另外要把计算所得到的时区加进来。不能是模认的。
        //如果是手机设置的北京时间,直接写死成8也行。呵呵。但是不建议如此
        dpdu->SetServiceCenterTimeStamp(aTime,numQuarterHours);

        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(2); // tmpEntry, mySmsHeader, richText
}


OK以上代码重要的地方我都标记了,代码可以直接使用。已经在N73,6120手机上测试通过。
分享到:
评论

相关推荐

    symbian_sms_alarm.rar_Symbian s_Symbian 短信_symbian_symbian sms_短

    标题中的“symbian_sms_alarm.rar”表明这是一个与Symbian操作系统相关的短信警报功能的压缩包文件。Symbian是早期智能手机操作系统的一种,尤其在2000年代中期至晚期非常流行,广泛应用于诺基亚等品牌的手机。这个...

    symbian 发送短信

    2. **创建短信**: 使用`CSmsTextMessage`类创建一个短信对象,设置短信的目标地址(电话号码),文本内容等。还可以设置短信类型,如普通短信或彩信,以及优先级等。 3. **建立连接**: 为了发送短信,你需要创建一...

    symbian SMS

    5. **创建短信**:创建短信涉及创建CSmsMessage对象,设置短信的属性,如收件人、文本内容、优先级等。文本内容可能需要根据短信长度进行分段,特别是当包含非ASCII字符时。 6. **发送短信**:发送短信需要打开一个...

    symbian s60 srd 创建短信接收 文档 +源码

    标题中的"Symbian S60 SRD 创建短信接收 文档 +源码"指的是在Symbian S60第三版软件开发套件(SRD)中,关于如何创建一个能够接收短信的应用程序的文档和源代码。这个主题涉及到移动应用开发,特别是针对诺基亚等...

    sms.zip_fp2.app_symbian message_symbian sms

    在这个特定的压缩包"sms.zip_fp2.app_symbian message_symbian sms"中,我们主要关注的是如何在Symbian S60 FP2平台上实现短信发送功能。 S60 FP2是Symbian OS的一个版本,主要面向诺基亚智能手机。FP(Feature ...

    MMS_SMS.rar_MMS_SendAppUiExamp_symbian_symbian MMs_symbian sms

    《Symbian系统下的MMS & SMS应用开发详解》 Symbian操作系统,作为一个历史悠久的移动设备操作系统,曾经在智能手机领域占据着重要地位。对于开发者来说,理解和掌握Symbian平台上的MMS( Multimedia Messaging ...

    symbian sms操作代码carbide C++

    在这个"SMS操作代码Carbide C++"的项目中,我们主要探讨如何使用Symbian SDK和Carbide.c++进行短信的创建、删除、读取以及写入等基本操作。 1. **Symbian短信API**:Symbian系统提供了EPOC运行时环境(ERegion)下...

    symbian短信拦截silentsms

    【标题】:Symbian操作系统中的Silent SMS(静默短信)拦截技术 【正文】: Symbian操作系统,作为一款历史悠久的智能手机平台,曾经在2000年代中期至2010年代初期占据主导地位。在这个系统上,开发人员可以创建...

    symbian 手机短信拦截源代码

    2. **SMS API**:Symbian提供了一系列API接口用于短信的读取、发送和管理。开发者需要熟悉`csd::SMSession`、`csd::SMMessage`等类,这些类提供了与短信服务交互的功能,例如读取短信存储、获取新短信通知等。 3. *...

    symbian 短信

    在Symbian操作系统中,短信服务(SMS)是系统的核心组件之一,用于实现手机与手机之间的文本通信。本文将深入探讨Symbian平台上的短信操作,包括如何发送、获取以及解析短信内容。 首先,让我们了解Symbian SMS的...

    sms socket

    使用Socket进行SMS拦截,可能需要使用到系统级别的库,如AT命令集来控制SIM卡模块,或者利用特定的Symbian SDK提供的短信API。 5. **SmsIntercet文件**: 压缩包中的"SmsIntercet"很可能是一个实现了SMS Socket...

    塞班短信恢复

    塞班系统手机短信恢复软件,恢复一个月内已删短信

    MMS_SMS短信彩信

    基于Symbian平台的手机短信、彩信的接收和发送的实现。

    smstimer.zip_symbian sms

    【标题】"smstimer.zip_symbian sms" 指的是一个专为Symbian操作系统设计的应用程序,用于定时发送短信。Symbian是一种早期广泛应用于智能手机的操作系统,尤其在诺基亚手机中非常常见。这个应用允许用户预先设定...

    symbian短信读取及回写收件箱程序

    短信读取和回写操作涉及的主要API可能包括Mbmssession类(用于创建和管理SMS会话)、Mbmsservice类(提供短信服务的基本功能)和Mbmssms类(表示单个短信对象)。 在实现过程中,开发者需要处理如下的关键步骤: 1....

    短信 拦截 类 symbian

    6. **权限管理**:由于涉及到短信的读取和删除,开发者需要在Symbian应用中声明相应的权限,例如CAP_SMS_READ和CAP_SMS_WRITE。这些权限在sis或sisx安装文件中声明,并在用户安装应用时请求授权。 7. **性能优化**...

    Symbian sms 资料

    根据提供的文件信息,我们可以深入探讨Symbian操作系统中与短信(SMS)相关的技术知识点,特别是针对S60 3rd Edition MTM版本中的SMS处理机制。 ### Symbian SMS技术概述 Symbian OS是一款专门为智能手机设计的...

    手机短信案例(Symbian OS)

    创建短信时,开发者需要设置短信的基本属性,如发件人、收件人、消息内容等。在Symbian OS中,这通常通过`CSmsMessage`类的构造函数完成,然后利用`SetOriginator`、`SetRecipient`和`SetTextData`等方法设置相应的...

    Symbian c++ 静默短信需要的头文件

    5. **相关函数声明**:例如,创建和初始化SMS会话的函数,以及用于发送和接收短信的API。 `gsmuset.inl` 文件则是一个内联文件,通常包含了`gsmuset.h` 中声明的类和函数的实现细节。内联文件的存在是为了提高代码...

    symbian sms 类似编辑框

    symbian sms 类似编辑框,实现一个类似发送短信的界面

Global site tag (gtag.js) - Google Analytics