VIA Selle SMS 系列之—存储篇

在短信菜单的设置选项中,有一项是 Save Sent message,如果选为开启,则会保存发送短信,否则则不会保存所发送短信。

在做Sms Service的时候,要求不保存所发送短信,但其它正常的短信仍得能存储。
所以要实现针部部分短信不存储的设置。

在发送短信前,会执行一个函数:
bool SmsControllerC::CheckStorageBeforeSendMsg(bool &HasOpenDialog,bool IsFromEditMsg,bool IsForEditAddress)
{
……
if (mModelP->GetSettings()->mAutoSave) //mAutoSave为设置是否保存的参数
{
//Check if Uim valid when sms storage is uim only.

uint32 Result = mModelP->CheckStorageAndDoAutoDelete(RecordNum);
……
}
……
}
此时如果把这里的IF条件置为FASLE,则就不会存储。针对特殊短信,加一条件判断即可,如:
if ((mModelP->GetSettings()->mAutoSave)&&(mModelP->notSmsServiceNum))

但现在的问题是为什么在这里置为False则不会存储,这里并没有存储的动作啊!并且,此时短信还没有发送,也不可能在这时候就存储下来。

这里折腾了很久,用模拟器跟发现mAutoSave在发送过程中影响三个地方,第一处如上,第二处是发送短信的时候: AslSmsResultT Result = AslSmsSendMessage(*SmsRecordP, &RecordId, &MessageId, GetSettings()->mAutoSave,IsLMS);
第三处是,短信发送成功反馈的时候:
bool SmsModelC::MessageSent(AslSmsSendStatusT *StatusP)
发送短信的时候没有明显进行保存短信的动作。
于是问题定位在第三个函数(先前一直没有注意到它,调试许久:!)

bool SmsModelC::MessageSent(AslSmsSendStatusT *StatusP)
{
……
AslSmsReplaceAddMessage(*SmsRecordP);//这里进行了保存动作,但没那么简单
……
}

AslSmsResultT AslSmsReplaceAddMessage(SmsRecordC &SmsRecord)
{
#ifdef FEATURE_LSM
VectorC SmsRecList;

SmsRecord.Split(&SmsRecList);

for(int i=0; i<SmsRecList.GetSize();i++)
{
SmsRecordC *TempRec = (SmsRecordC *)SmsRecList.GetElement(i);
if (AslGetIdFromReplaceIdArray(&recid)) // 问题的最终原因在此!!!
{
result = (AslSmsResultT)ValSmsReplaceTxtMessage(*TempRec,recid);
}
delete TempRec;
}
#endif
return result;
}

bool AslGetIdFromReplaceIdArray(uint16* RecId)
{

if( IsEqual(0, mReplaceIdArray.GetSize()) )
{
return FALSE; //若在CheckStorageBeforeSendMsg时,把那条IF置为False,此在这里返回
}
……
return TRUE;
}

现在大致的流程清晰了许多,首先在发送前在CheckStorageBeforeSendMsg会判断mAutoSave的状态,若为TRUE,则预留一个空间用来保存此短信,若为FALSE,则不预留。在短信成功发送后,进行保存的时候,MessageSent中的AslSmsReplaceAddMessage会判断是否有预留空间,没有的话,无论mAutoSave怎么设置,则都不会保存。

针对Sms service的疑虑解决了,但预留的方式没有进一步的深入,如何申请预留空间的,如何添加删除等。留给读者自己深入分析吧:)

VIA Selle Sms系列的文章,到此告一段落,回顾这段时间在整SMS相关,一言以蔽之短信模块博大精深,这个系列的文章也只是水面之上冰山一角。但应该是个引子,顺着这些大的线索深入下去,终有一日能深入到冰山之底的
 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.