如何不显示开机SIM卡欢迎语
在 Feature Phone 上,如果插 SIM 卡开机,有些 SIM 卡有提示信息,例如:“欢迎使用中国移动服务!”, 类似这样的提示信息是 SIM 卡上报的 display text, 手机是按照协议要求做显示。
display text 可分两类:
第一类:仅仅显示提示信息,不需要 user 确认;
第二类:必须要 User 输入或确认;
针对“第一类”不需要user确认的 display text 提示信息,在一些特殊项目上,如果不希望显示出来,请参考下面修改。
解决方法:
因为 display text 是 SIM 卡上报的 SAT 命令,一定要回对应的 terminal response 给 SIM 卡,否则 SIM 卡就不能正常执行其他的 SAT 命令,可能出现的问题有:不能打电话。所以,如果不希望显示 display text, 请参考下面修改两点。
为了安全,请不要使用原有的 timer id, 也就是不要使用 SAT_TIMER_CLEAR_DELAY, 请自定义一个 timer ID, 然后仅在这里使用自定义的 timer ID.
修改后的代码:
1. 添加函数:
void srv_sat_hide_display_text_timeout(void) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); }
2. 修改函数:
注意代码中 #if 1 ......#endif
如果有问题,请提供log, filter: MOD_L4C, MOD_COMMON_APP(group_3),MOD_SIM(all class on),MOD_FW.
MMI_BOOL srv_sat_do_display_text( srv_sat_enum sat_id, srv_sat_cntx_struct *context, srv_sat_display_text_struct *display_text, void *info) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ mmi_sat_display_text_ind_struct *sim_ind; mmi_sim_enum sim_id = SATID_2_SIMID(sat_id); /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ sim_ind = (mmi_sat_display_text_ind_struct*) info; memset(display_text, 0, sizeof(srv_sat_display_text_struct)); memcpy(display_text->cmd_detail, sim_ind->cmd_detail, 5 * sizeof(U8)); if (context->cmd_type == SRV_SAT_CMD_SEND_SS_RETURN_RESULT || context->cmd_type == SRV_SAT_CMD_SEND_USSD_RETURN_RESULT) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } if (!srv_sat_do_check(sat_id, SRV_SAT_CHECK_DM_SETTING_EX)) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_ME_CURRENTLY_UNABLE_TO_PROCESS_CMD, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } /* If the ME receives an icon and either an empty, or no, alpha identifier/text string is given by the SIM, than the ME shall reject the command with general result "Command data not understood by ME". */ if (sim_ind->is_icon_available && !sim_ind->no_text_string) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_DATA_NOT_UNDERSTAND_BY_ME, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } /* for hide display text, which type no need user confirm. */ #if 1 kal_sys_trace("[text] 0 "); if (sim_ind->clear_text_type == SRV_SAT_CLEAR_AFTER_SHORT_DELAY) { kal_sys_trace("[text] 1 "); if(sim_ind->immediate_res == MMI_TRUE) { kal_sys_trace("[text] 2 "); srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } else { kal_sys_trace("[text] 3 "); StartTimer(SAT_TIMER_CLEAR_DELAY, MMI_SAT_DISPLAY_TEXT_DELAY_DURATION*1000, srv_sat_hide_display_text_timeout); /*if use gui_start_timer, no need to define timer id.*/ //gui_start_timer(MMI_SAT_DISPLAY_TEXT_DELAY_DURATION*1000, srv_sat_hide_display_text_timeout); return MMI_FALSE; } } kal_sys_trace("[text] 4 "); #endif // display_text->priority = (srv_sat_priority_enum) sim_ind->priority; display_text->clear_type = (srv_sat_clear_enum) sim_ind->clear_text_type; display_text->immediate_res = (MMI_BOOL) sim_ind->immediate_res; display_text->text_string = DO_TEXT(sim_ind->text_string, sim_ind->no_text_string, sim_ind->dcs_of_text_string); ADD_TO_ICON( (MMI_BOOL) sim_ind->is_icon_available, sim_ind->icon_info.icon_id, (srv_sat_icon_enum) sim_ind->icon_info.icon_attr, &display_text->icon); return MMI_TRUE; }
修改前的代码:
MMI_BOOL srv_sat_do_display_text( srv_sat_enum sat_id, srv_sat_cntx_struct *context, // srv_sat_display_text_struct *display_text, void *info) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ mmi_sat_display_text_ind_struct *sim_ind; mmi_sim_enum sim_id = SATID_2_SIMID(sat_id); srv_sat_display_text_struct *display_text = &g_srv_sat_proactive_sim[sat_id].cmd_data.display_text; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ sim_ind = (mmi_sat_display_text_ind_struct*) info; memset(display_text, 0, sizeof(srv_sat_display_text_struct)); memcpy(display_text->cmd_detail, sim_ind->cmd_detail, 5 * sizeof(U8)); if (context->cmd_type == SRV_SAT_CMD_SEND_SS_RETURN_RESULT || context->cmd_type == SRV_SAT_CMD_SEND_USSD_RETURN_RESULT) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_PERFORMED_SUCCESSFULLY, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } if (!srv_sat_do_check(sim_id, SRV_SAT_CHECK_DM_SETTING_EX)) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_ME_CURRENTLY_UNABLE_TO_PROCESS_CMD, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } /* If the ME receives an icon and either an empty, or no, alpha identifier/text string is given by the SIM, than the ME shall reject the command with general result "Command data not understood by ME". */ if (sim_ind->is_icon_available && !sim_ind->no_text_string) { srv_sat_terminal_response_display_text( sim_id, SRV_SAT_TERMINAL_RES_CMD_DATA_NOT_UNDERSTAND_BY_ME, SRV_SAT_ADDITIONAL_RES_NO_SPECIFIC_CAUSE); return MMI_FALSE; } display_text->priority = (srv_sat_priority_enum) sim_ind->priority; display_text->clear_type = (srv_sat_clear_enum) sim_ind->clear_text_type; display_text->immediate_res = (MMI_BOOL) sim_ind->immediate_res; display_text->text_string = DO_TEXT(sim_ind->text_string, sim_ind->no_text_string, sim_ind->dcs_of_text_string); ADD_TO_ICON( (MMI_BOOL) sim_ind->is_icon_available, sim_ind->icon_info.icon_id, (srv_sat_icon_enum) sim_ind->icon_info.icon_attr, &display_text->icon); return MMI_TRUE; }