4552|0

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MTK短信开发详解(六) [复制链接]

MTK短信开发详解(六)
 3.3 、【读取】短信
 在待机屏按下[读取]键,向底层请求短信内容。阅读短信内容之后,按[返回]键,则退到收件箱。
[\plutommi\mmi\messages\messagessrc\SmsPsHandler.c]
void mmi_msg_get_msg_new(void)
{
[...]
mmi_msg_get_msg_req(MMI_FRM_SMS_APP_NOBOX, g_msg_cntx.msg_ind_index);// 发送读取短信内容的请求, 注意, 这里用的是NOBOX
mmi_frm_sms_get_list_index(&type, &list_index, g_msg_cntx.msg_ind_index);
[...]
mmi_msg_exit_bizbox_list_dummy();↘
[\plutommi\mmi\Messages\MessagesSrc\MessagesMiscell.c]
void mmi_msg_exit_inbox_list_dummy(void)
    currHistory.entryFuncPtr = mmi_msg_entry_inbox_list;//设置阅读新短信之后按“返回”键跳转到哪里。
g_msg_cntx.toDisplayMessageList = TO_DISPLAY_MESSAGE_LIST_INBOX;//设置显示页面

 3.4、更新短信状态
 读取请求发出之后,L4层已经把新短信状态改成已读, mmi_frm_sms_msg_box中的状态也应同步。
[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
void mmi_frm_sms_read_sms(PsFuncPtrU16 callback, module_type mod_src, U16 type, U16 index, MMI_BOOL change_status)
   mmi_frm_sms_set_sms_status(type, index, MMI_FRM_SMS_INBOX);


[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSUtil.c]
U8 mmi_frm_sms_set_sms_status(U16 type, U16 index, U16 newtype)
{
    [...]
    switch (type)
    {
        [...]
        case MMI_FRM_SMS_INBOX:
        case MMI_FRM_SMS_UNREAD:
            msgindex = mmi_frm_sms_inbox_list[index];
            mti = (mmi_frm_sms_msg_box[msgindex].msgtype & 0xf000);
            mmi_frm_sms_msg_box[msgindex].msgtype = mti | newtype;// 更改状态
            break;
        […]
}

 3、短信箱
 3.1、信箱初始化
 开机时,系统逐条读取所有短信,保存到mmi_frm_sms_msg_box, 然后根据短信类型(未读/已读/已发送...)将索引添加到对应的 mmi_frm_sms_xxbox_list。
 开机之后,收到新短信或者发送短信时选择了“发送并保存”,则短信会即时添加到mmi_frm_sms_msg_box和各自对应的 mmi_frm_sms_xxbox_list。

(1) void mmi_frm_sms_convert_mt_to_entry()
(2) void mmi_frm_sms_convert_startup_read_to_entry()

 3.2、信箱入口
 以收件箱为例。入口函数并不直接生成列表,而是传递回调函数 mmi_msg_inbox_list_get_item给Categrory。
mmi_msg_pre_entry_inbox_list
[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
void mmi_msg_entry_inbox_list(void)
{
    [...]
    ShowCategory184Screen(
        STR_SCR6010_CAPTION,
        IMG_SMS_ENTRY_SCRN_CAPTION,
        STR_GLOBAL_OK,
        IMG_GLOBAL_OK,
        STR_GLOBAL_BACK,
        IMG_GLOBAL_BACK,
        numitem,
        mmi_msg_inbox_list_get_item,
        mmi_msg_inbox_list_get_hint,
        hiliteitem,
        guiBuffer);
    [...]
}


[\plutommi\mmi\GUI\GUI_SRC\wgui_dynamic_menuitems.c]
void load_dynamic_item_buffer(S32 n_items)
{
    for (i = 0; i < n_items; i++)
    {
        if (dynamic_item_buffer.load_func(i, (UI_string_type) subMenuData, &image, 3))
  // 调用mmi_msg_inbox_list_get_item
 [...]
}

 在mmi_msg_inbox_list_get_item函数,取方号码(或姓名)做信箱列表item标题,并判断短信的状态(已读/未读)。

[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
pBOOL mmi_msg_inbox_list_get_item(S32 item_index, UI_string_type str_buff, PU8 *img_buff_p, U8 str_img_mask) mmi_msg_inbox_list_get_item
{
[…]
AnsiiToUnicodeString(temp, (S8*) mmi_frm_sms_get_address(MMI_FRM_SMS_APP_INBOX
, (U16) item_index)); //1 取发件方号码
        name = lookUpNumber(temp);//2 取发件方姓名(如果电话本有记录)
[…]
        *img_buff_p = get_image(IMG_MESSAGE_UNREAD); //3 未读短信图标
[…]
        *img_buff_p = get_image(IMG_MESSAGE_READ); //4 已读短信图标
[…]
}

 3.3、阅读短信
 以收件箱为例。阅读短信时,并不是直接从全局数组 mmi_frm_sms_msg_box 读取,而是通过发送PRT_MSG_ID_MMI_SMS_GET_MSG_REQ获得短信,读取之后,短信的未读状态变为已读。
[\plutommi\mmi\Messages\MessagesSrc\SmsMoMtGuiInterface.c]
void mmi_msg_entry_inbox_list(void)
    SetLeftSoftkeyFunction(mmi_msg_get_msg_inbox, KEY_EVENT_UP);// 设置左软件


[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
void mmi_msg_get_msg_inbox(void)
    g_msg_cntx.toDisplayMessageList = TO_DISPLAY_MESSAGE_LIST_INBOX;
    mmi_msg_get_msg_req(MMI_FRM_SMS_APP_INBOX, (U16) g_msg_cntx.currBoxIndex);// 请求的是 MMI_FRM_SMS_APP_INBOX 短信


[\plutommi\mmi\Messages\MessagesSrc\SmsPsHandler.c]
void mmi_msg_get_msg_req(U16 type, U16 index)
        mmi_frm_sms_read_sms(mmi_msg_get_msg_rsp, MOD_MMI, type, index, MMI_TRUE);


[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSCore.c]
void mmi_frm_sms_read_sms(PsFuncPtrU16 callback, module_type mod_src, U16 type, U16 index, MMI_BOOL change_status)
{
 mmi_frm_sms_get_sms_index((mmi_frm_sms_msgbox_enum) type, index, data); // 根据信箱类型,取得L4index。
    [...]
 mmi_frm_sms_set_sms_status(type, index, MMI_FRM_SMS_INBOX);// 同步更改mmi_frm_sms_msg_box 短信状态, 底层短信状态在发送读取请求时更改。
    [...]
    mmi_frm_sms_write_action(callback, mod_src, data, mmi_frm_sms_read_sms_req);// 提交读取短信请求
}


[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
void mmi_frm_sms_read_sms_req(void *inMsg)
    mmi_frm_sms_read_sms_seg();


[\plutommi\mmi\MiscFramework\MiscFrameworkSrc\SMSMsg.c]
U8 mmi_frm_sms_read_sms_seg(void)
SetProtocolEventHandler(mmi_frm_sms_read_sms_rsp, PRT_MSG_ID_MMI_SMS_GET_MSG_RSP);
mmi_frm_sms_send_message(MOD_MMI, MOD_L4C, 0, PRT_MSG_ID_MMI_SMS_GET_MSG_REQ, (oslParaType*) msgReq, NULL);           
完整版本请见 http://www.51qianru.cn/bbs/
                                                        曙海教育

                                                曙海嵌入式学院3G通信培训中心

                                            (MTK培训,Android培训,iPhone培训)

                                                电话:021-51875830

                                                网址:http://www.51qianru.cn

                                                    讲师:李现路

                                              版权所有-曙海教育 转发请注明出处

 

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表