MTK短消息编程
分类:MTK学习资料2012-04-0216:1817人阅读评论(0)收藏举报
1.获取短消息,
MTK没有专门用于获取短消息内容的函数,这给我们操作短消息带来了不便.比如有时我们需要分析短消息的内容,再比如有时要把短消息写入T卡了,再或者有时要把某条短消息显示到某些应用场合了,这时就需要获取短消息的内容.这里提供一个我经常使用的接口:
#include"SMSApi.h"#include"med_utility.h"externunsignedshortmmi_frm_sms_show_list_index[];S8g_sms_buffer[160]={0};charConvertString(charstr){chartemp;inti;intlen=wstrlen(str);for(i=0;i while(((ss<<8)+(ss+1))!=0){lenth+=2;ss+=2;}returnlenth;}
voidmy_msg_get_msg_rsp(voiddata,module_typemod,U16result){//U8type=(U8)data;EMSDatapEms;intlen=0;GetEMSDataForView(&pEms,0);
len=wstrlen((char)(pEms->textBuffer))+2;
//把获取的信息复制到g_sms_buffer以备使用if(len<20){memcpy(g_sms_buffer,pEms->textBuffer,len);}else{memcpy(g_sms_buffer,pEms->textBuffer,20);}}//type:MMI_FRM_SMS_APP_INBOX,MMI_FRM_SMS_APP_OUTBOX,MMI_FRM_SMS_APP_DRAFTS//index:0~0XFFS32my_msg_get_msg_req(U8type,U16req_index,E_MTPNP_AD_FILTER_RULEcur_sim){intcount=0;U16index;/disallowre-enteringSMSapplicationwhenthereisapendingSMSjobrunninginthebackground/if(mmi_frm_sms_check_action_pending()){return1;}#ifdef__MMI_DUAL_SIM_MASTER__if(cur_sim==MTPNP_AD_FILTER_MASTER){MTPNP_AD_SMS_Set_Filter_Rule(MTPNP_AD_FILTER_MASTER);count=MTPNP_PFAL_SMS_Get_SMS_List_Size(type);}else{MTPNP_AD_SMS_Set_Filter_Rule(MTPNP_AD_FILTER_SLAVE);count=MTPNP_PFAL_SMS_Get_SMS_List_Size(type);}if((count<=0)||(req_index>=count)){return-1;}MTPNP_PFAL_SMS_Set_Current_Index(req_index);index=mmi_frm_sms_show_list_index[req_index];#elseindex=req_index;#endif
mmi_frm_sms_read_sms(my_msg_get_msg_rsp,MOD_MMI,type,index,MMI_TRUE);
return0;}
2.发短信,有时我们需要向网络或者别的基站发送一条自填充内容的短信.比如订阅某种服务,或者查询话费,或者定时发送短信,或者拒接电话时给MT发一条提示短信等场合.函数有5个参数,mobileNo为手机号码,ASC类型字串,mobileNoLen号码长度,smsMsg短消息内容,应为UCS2编码,smsMsgLen长度,simid双卡情况下,0为主卡,1为副卡
#include"SMSApi.h"#include"ProtocolEvents.h"#ifndef__MMI_DUAL_SIM_MASTER__voidmy_send_sms(S8mobileNo[],U32mobileNoLen,U8smsMsg[],U32smsMsgLen)#elsevoidmy_send_sms(S8mobileNo[],U32mobileNoLen,U8smsMsg[],U32smsMsgLen,?U8simid)
#endif{mmi_sms_send_msg_req_structsendSms;sendSms=(mmi_sms_send_msg_req_struct)OslConstructDataPtr(sizeof(sendSms));sendSms->dcs=SMSAL_UCS2_DCS;sendSms->udhi=0;sendSms->length=smsMsgLen;memset(sendSms->msg,0,SMSAL_MAX_MSG_LEN);memcpy(sendSms->msg,smsMsg,sendSms->length);sendSms->profile=0;sendSms->para=0;sendSms->reply_index=MMI_FRM_SMS_INVALID_INDEX;sendSms->dest.type=CSMCC_DEFAULT_ADDR_TYPE;memset((S8)sendSms->dest.number,0,MAX_CC_ADDR_LEN);sendSms->dest.length=mobileNoLen;memcpy(sendSms->dest.number,mobileNo,sendSms->dest.length);sendSms->seq_num=0;sendSms->mms_mode=0;
//simsp_set_sms_ProtocolEventHandler();#ifndef__MMI_DUAL_SIM_MASTER__mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ,(oslParaType)sendSms,NULL);
#else//__MMI_DUAL_SIM_MASTER__if(simid==0){mmi_frm_sms_send_message(MOD_MMI,MOD_L4C,0,PRT_MSG_ID_MMI_SMS_SEND_MSG_REQ,(oslParaType)sendSms,NULL);
}else{MTPNP_PFAL_Send_Message_Segment((void)sendSms);}#endif//__MMI_DUAL_SIM_MASTER__}
|
|