mtk 后台自动回复短信 碉堡了.......
时间:10-02
整理:3721RD
点击:
设备里面有拦截功能,主机给设备发短信,根据收到不同短信指令,向服务器发送请求,服务器返回数据,然后把内容返回给主机。
返回短信长度超过一条了,所以用后台长短信发送,内容可以正常返回一条(长短信),但是偶尔会在后面跟着一条“空格”内容短信。 不经常发生,
先贴个代码:
void test_sendSms(char* pNumber, char*pContent, PsFuncPtrU16 callback)
{
int numlen = 0;
S8 * textbufUCS2 = NULL;
S8 smsPhoneNumber [(MAX_DIGITS_SMS+1)*ENCODING_LENGTH] = {0};
EMSData *pEMS = NULL;
byte result;
int len,i;
len = mlbswstrlen(pContent);
ReleaseEMSEditBuffer();
pEMS = (EMSData *)GetEMSDataForEdit(0,1);
if(pEMS == NULL)
return;
g_msg_cntx.sendSaveStatus = SEND_SAVE_NIL;
memset (g_msg_cntx.smsPhoneNumber, 0, sizeof(g_msg_cntx.smsPhoneNumber));
numlen = strlen(pNumber) > MAX_DIGITS_SMS?MAX_DIGITS_SMS:strlen(pNumber);
AnsiiNToUnicodeString((S8 *) smsPhoneNumber,( S8 *) pNumber,numlen);
pfnUnicodeStrcpy(g_msg_cntx.smsPhoneNumber,(S8 *)smsPhoneNumber);
PendingSaveSendData.totalSegments=1;
PendingSaveSendData.mti=SMSAL_MTI_SUBMIT;
memset(PendingSaveSendData.TPUD, 0,sizeof(PendingSaveSendData.TPUD));
for (i=1; i<mmi_msg_get_seg_num(); i++)
{
PendingSaveSendData.TPUDLen=0;
PendingSaveSendData.TPUD_p=NULL;
PendingSaveSendData.l4index=SMS_INVALID_INDEX;
PendingSaveSendData.TPUD_udhi= FALSE;
}
g_msg_cntx.sendMessageCase = SEND_CASE_SEND_ONLY;
textbufUCS2 = (S8 *)OslMalloc(len+2);
if(textbufUCS2 == NULL)
return;
memset((void *)textbufUCS2,0,len+2);
memcpy((void *)textbufUCS2,(void *)pContent,len);
result = AppendEMSString (IMM_INPUT_TYPE_SENTENCE,
pEMS, (U8*)textbufUCS2, SMSAL_UCS2_DCS, NULL);
if(textbufUCS2)
OslMfree(textbufUCS2);
if(result)
{
mmi_frm_sms_send_struct * sendData=OslMalloc(sizeof(mmi_frm_sms_send_struct));
if(sendData == NULL)
return;
MlbsCloseSmsReport = TRUE;
memset((S8*)sendData, 0, sizeof(mmi_frm_sms_send_struct));
memset(sendData->number, 0, MAX_DIGITS_SMS);
memcpy(sendData->number, pNumber,numlen);
//自定义回调函数判断
if(callback)
{
mmi_frm_sms_send_sms( callback, MOD_MMI, sendData);
}
else
{
mmi_frm_sms_send_sms( mlbs_send_mode_message_cellback, MOD_MMI, sendData);
}
if(sendData)
OslMfree(sendData);
}
else
{
MlbsCloseSmsReport = FALSE;
}
}
我调试, 后面那条“空格”短信,没用经过这个函数处理,
上面函数使我写的, 其他都是调用自带的短信函数。
这个情况跟服务器返回的内容有关系吗?
返回短信长度超过一条了,所以用后台长短信发送,内容可以正常返回一条(长短信),但是偶尔会在后面跟着一条“空格”内容短信。 不经常发生,
先贴个代码:
void test_sendSms(char* pNumber, char*pContent, PsFuncPtrU16 callback)
{
int numlen = 0;
S8 * textbufUCS2 = NULL;
S8 smsPhoneNumber [(MAX_DIGITS_SMS+1)*ENCODING_LENGTH] = {0};
EMSData *pEMS = NULL;
byte result;
int len,i;
len = mlbswstrlen(pContent);
ReleaseEMSEditBuffer();
pEMS = (EMSData *)GetEMSDataForEdit(0,1);
if(pEMS == NULL)
return;
g_msg_cntx.sendSaveStatus = SEND_SAVE_NIL;
memset (g_msg_cntx.smsPhoneNumber, 0, sizeof(g_msg_cntx.smsPhoneNumber));
numlen = strlen(pNumber) > MAX_DIGITS_SMS?MAX_DIGITS_SMS:strlen(pNumber);
AnsiiNToUnicodeString((S8 *) smsPhoneNumber,( S8 *) pNumber,numlen);
pfnUnicodeStrcpy(g_msg_cntx.smsPhoneNumber,(S8 *)smsPhoneNumber);
PendingSaveSendData.totalSegments=1;
PendingSaveSendData.mti=SMSAL_MTI_SUBMIT;
memset(PendingSaveSendData.TPUD, 0,sizeof(PendingSaveSendData.TPUD));
for (i=1; i<mmi_msg_get_seg_num(); i++)
{
PendingSaveSendData.TPUDLen=0;
PendingSaveSendData.TPUD_p=NULL;
PendingSaveSendData.l4index=SMS_INVALID_INDEX;
PendingSaveSendData.TPUD_udhi= FALSE;
}
g_msg_cntx.sendMessageCase = SEND_CASE_SEND_ONLY;
textbufUCS2 = (S8 *)OslMalloc(len+2);
if(textbufUCS2 == NULL)
return;
memset((void *)textbufUCS2,0,len+2);
memcpy((void *)textbufUCS2,(void *)pContent,len);
result = AppendEMSString (IMM_INPUT_TYPE_SENTENCE,
pEMS, (U8*)textbufUCS2, SMSAL_UCS2_DCS, NULL);
if(textbufUCS2)
OslMfree(textbufUCS2);
if(result)
{
mmi_frm_sms_send_struct * sendData=OslMalloc(sizeof(mmi_frm_sms_send_struct));
if(sendData == NULL)
return;
MlbsCloseSmsReport = TRUE;
memset((S8*)sendData, 0, sizeof(mmi_frm_sms_send_struct));
memset(sendData->number, 0, MAX_DIGITS_SMS);
memcpy(sendData->number, pNumber,numlen);
//自定义回调函数判断
if(callback)
{
mmi_frm_sms_send_sms( callback, MOD_MMI, sendData);
}
else
{
mmi_frm_sms_send_sms( mlbs_send_mode_message_cellback, MOD_MMI, sendData);
}
if(sendData)
OslMfree(sendData);
}
else
{
MlbsCloseSmsReport = FALSE;
}
}
我调试, 后面那条“空格”短信,没用经过这个函数处理,
上面函数使我写的, 其他都是调用自带的短信函数。
这个情况跟服务器返回的内容有关系吗?
解决了。 在 test_sendSms里面加入状态标示, 如果在使用就不处理本次短信发送请求。状态清零在回调函数里实现。
不是完美的解决方法
主要后台发短信操作,帮忙看下有没有问题。
因为之前用的是一条(70汉字)短信,没有这个问题,后来因为内容太多,另外写一个前期处理函数。
确实有点不清楚
没人遇到这个问题。 问题描述不够清楚?
小编不错!
奖励1RDB,感谢小编的分享
坑人的代码 好多用户要求清此代码!很难清干净。
Good!