短信中心号码

来源:互联网 发布:仓储优化设计方案 编辑:程序博客网 时间:2024/04/30 15:50

      终于能在View的二阶段构造函数ConstructL中发送短信了,即自动发送短信,不用按键触发事件。这是问题的关键,我前段时间一直以为是发送短信的那段代码SmsHandler中,一个活动对象去中调用另一个活动对象出了问题。在此我要感谢Nokia论坛的2位大大Cxt_programmer和qxiaoquan,尤其是qxiaoquan大大,你当时那句哦, 建议你转行, 真的, 不是开玩笑, 换个工种可能你的人生更美好”真的伤到了我。但就如我回复你的那样,我真的不能回头了,我必须让自己受伤了去成长,因为就最近给我的这点时间来说实在是太短了,我不能以大多数人的那种方式去成长,我被安排为一个人,虽然我一直抱怨,我也不敢说以后我不会去抱怨,但现在我有点喜欢这种感觉了。

      通过这次解决问题的方式,我学会了用Debug去简单的调试程序,虽然基本得不能再基本,但是对于自己的这次成长还是很开心。我在程序中设置了很多断点,通过Debug一步一步调试程序,发现程序中

if ( !serviceSettings->ServiceCenterCount() )
      {
      CleanupStack::PopAndDestroy( settings );
      return EFalse;     // quit creating the message
      }

居然走的是return EFlase这步,这样短信就只能创建在待发箱中,而不能真正的发送出去,而把这个if条件去掉,会直接导致数组越界的错误,而程序的这小段主要目的是为了获得短信中心号码,所以我只能寻找另外的方式去获得短信中心号码。这样我的目标就比较明确了,于是找到以下代码:

        CSmsSettings* settings = CSmsSettings::NewL();

        CSmsAccount* account = CSmsAccount::NewLC();
        account->InitialiseDefaultSettingsL(*settings);
       
        settings->SetValidityPeriod(ESmsVPWeek);
        settings->SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFInteger);
        settings->AddServiceCenterL(_L("vincent"), _L("+8613800138000"));
        settings->AddServiceCenterL(_L("vvvincent"), _L("+8613800138000"));
        settings->SetDefaultServiceCenter(1);
//        settings->SetReplyQuoted(EFalse);
//        settings->SetRejectDuplicate(ETrue);
//        settings->SetDelivery(ESmsDeliveryImmediately);
//        settings->SetDeliveryReport(EFalse);
//        settings->SetReplyPath(EFalse);
//        settings->SetMessageConversion(ESmsConvPIDNone);
//        settings->SetCanConcatenate(ETrue);
    
        account->SaveSettingsL(*settings);

这段代码前面是对短信中心号码的设置,后面还包括对发送短信一些其他方面的设置,SDK上可以轻松的查到,这样问题就基本解决了。以前的老问题,用UI去控制发送短信没有错,用

if ( !serviceSettings->ServiceCenterCount() )
            {
            CleanupStack::PopAndDestroy( settings );
            return EFalse;     // quit creating the message
            }

        else
            {
            CSmsNumber* smsCenter= CSmsNumber::NewL();
            CleanupStack::PushL(smsCenter);
            smsCenter->SetAddressL((serviceSettings->GetServiceCenter( serviceSettings->DefaultServiceCenter())).Address());
            header.Message().SetServiceCenterAddressL( smsCenter->Address() );
            CleanupStack::PopAndDestroy(smsCenter);
            CleanupStack::PopAndDestroy( settings );
            }

可以成功的获得短信中心号码,主要是因为初始化的一些问题,构造函数比谁都先被调用,UI控件被触发的时候,该初始化的都初始化了,但是怎么个走向,我还是不太清楚,有时间我会尽快搞定这个问题。

      现在来说说短信中心号码的问题,在百度,谷歌去搜索短信中心号码,基本都是些无用的东西,在中国+8613800138000这个可以看成是短信中心号码,最起码设置成这个不会出问题,用SetServiceCenterAddressL("+8613800138000")这个一直没用,我也不知道为什么,这个我要慢慢的吃透了一些东西才能找到原因。

      另外修改短信中心号码可以采用以下方法:

      CSmsAccount* account = CSmsAccount::NewL();
      CleanupStack::PushL(account);
      CSmsSettings* sendOptions = CSmsSettings::NewL();
      CleanupStack::PushL(sendOptions);
      account->InitialiseDefaultSettingsL(*sendOptions);
      sendOptions->CopyL(iSmsMtm->ServiceSettings()); // restore existing settings
      // set send options
      sendOptions->SetDelivery(ESmsDeliveryImmediately); // set to be delivered immediately
      sendOptions->SetStatusReportHandling(CSmsSettings::EDiscardReport);
      sendOptions->SetDeliveryReport(EFalse);
      // here we modified the character set
      sendOptions->SetCharacterSet(TSmsDataCodingScheme::ESmsAlphabetUCS2);
      scIndex = sendOptions->DefaultServiceCenter();
      if ((scIndex < 0) || (scIndex >= numSCAddresses))
      scIndex = 0;
      sendOptions->GetServiceCenter(scIndex).SetAddressL(CnBuf);
      //This can only be used on SMS-SUBMIT type messages. The message PDU
      //type can be checked by using the CSmsHeader::Type API.
      //sendOptions->AddServiceCenterL(_L("scenter"),_L("+8613800200502"));
      sendOptions->SetCommDbAction( CSmsSettings::EStoreToCommDb );
      sendOptions->SetSmsBearerAction( CSmsSettings::EStoreToCommDb );
      //header.SetServiceCenterAddressL(CnBuf); //改变短信中心号码
      //header.SetSmsSettingsL(*sendOptions);
      account->SaveSettingsL(*sendOptions);
      CleanupStack::PopAndDestroy(sendOptions);
      CleanupStack::PopAndDestroy(account);

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子不好好做作业怎么办 手破了红肿了怎么办呢 老师反应孩子在校粗心胆小怎么办 四年级的学生计算粗心怎么办 老打孩子骂孩子怎么办 站久了脚肿了怎么办 孩子初中了书写越来越潦草怎么办 给孩子自由孩子无法无天怎么办 孩子挑食幼儿园老师该怎么办 老师说孩子挑食家长怎么办 工作中老是粗心不细心怎么办 小孩数学总是特别粗心该怎么办 孩子起范疙瘩的怎么办 做题马虎不认真怎么办 孩子考差了家长怎么办 小孩写作业不认真怎么办 小孩不认真检查作业怎么办 一年级的小孩作业不认真怎么办 一年级学生做题粗心怎么办 一年级的学生做题粗心怎么办 孩子做作业注意力不集中怎么办 小学三年孩子抄答案怎么办 孩子写作业不认真审题怎么办 一年级小孩审题不认真怎么办 孩子审题不认真马虎怎么办 孩子做作业不认真审题怎么办? 考老师考砸了怎么办 重要考试考砸了怎么办 二年级孩子做数学题粗心怎么办 二年级孩子考试粗心怎么办 二年级孩子考试总是粗心怎么办 二年级孩子总是粗心怎么办 小学一年级孩子抄别人作业怎么办 被老师发现抄答案怎么办 考试抄答案被老师发现怎么办 孩子撒谎不写作业怎么办 小学生做题容易马虎出错怎么办 小学生做题老是马虎怎么办 小学生做题马虎不认真怎么办 会做的题总做错怎么办 孩子数学做题粗心怎么办