短信中心号码
来源:互联网 发布:仓储优化设计方案 编辑:程序博客网 时间: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);
- 短信中心号码
- 短信中心号码
- 短信中心号码获取
- 全国短信中心号码:
- 短信中心号码
- 短信中心号码的读取
- 自动读取短信中心号码
- 中国移动短信中心服务中心号码一览表
- 多普达586短信中心号码设置
- 移动信息中心号码,移动短信中心号码速查
- 教大家用短信中心号码破解手机游戏
- 解决:更改短信中心号码不能及时更新显示
- 深度分析:Android中Mms设置页面更改短信中心号码流程
- 安卓2.3以上版本设置与修改短信中心号码方法
- 全国手机短信中心号码
- 获取Android手机短信中心号码
- 短信中心号
- 记住短信报警号码:12110
- 如何明确故事内容
- C语言面试题集锦
- Popup a Browser Window
- Ubuntu9.10下常用软件的安装笔记
- svn冲突解决
- 短信中心号码
- 【void *】的讲解
- 思成出品: 数据结构视频课程01-2
- 谨慎使用IsMissing函数
- EasyMock简单使用方法
- 故事与任务
- C#中的函数指针
- 遗传算法
- 输出目录下的文件树形结构