当前位置: 代码迷 >> 综合 >> 如何自动转发一条彩信,不显示编辑等界面
  详细解决方案

如何自动转发一条彩信,不显示编辑等界面

热度:31   发布时间:2024-01-19 20:37:05.0
目前的修改结果,inbox,选择msg,option,forward,彩信会被自动发送出去。可以需要增加自己的key 注册,特定的判断决定哪些信息要执行auto forward, 
参考设计如下,代码使用AUTO_FORWARD_MMS的宏包含: 
1. 如果需要特定key转发,可以注册到mmi_umms_app_ui_plug_in_forward, 之前可以决定哪些信息forward,并设置全
局flag来标识
 
 
2. MmsSrvGprot.h,添加 
#define AUTO_FORWARD_MMS 
#ifdef AUTO_FORWARD_MMS 
extern MMI_BOOL auto_forward_mms; 
#endif
 
 
3. MMSAppUIPlugin.c增加 
(1) 
#ifdef AUTO_FORWARD_MMS 
MMI_BOOL auto_forward_mms = MMI_FALSE; 
#endif
 
 
(2) 
mmi_umms_app_ui_plug_in_forward函数 
将auto_forward_mms 设置为true 
 else 
        { 
            memset(&uc_start, 0, sizeof(srv_mms_start_uc_struct)); 
            uc_start.msg_id = info->msg_id; 
            uc_start.uc_mode = MMA_MODE_FORWARD; 
            uc_start.sim_id = MMI_SIM_ID_SIM1; 
    
   #ifdef AUTO_FORWARD_MMS 
   if( info->msg_info->from_address )   /// 这个条件可以没有,作用主要是根据from地址判断下该信息是否是需
要forward的彩信 
    { 
     auto_forward_mms = MMI_TRUE;  //设置flag为true 
    } 
     #endif 
        #ifdef __MMI_MMS_POSTCARD__ 
            if (info->msg_info->msg_type == MMA_MSG_TYPE_POSTCARD) 
            { 
                uc_start.edit_mode = MMI_UC_MMS_EDIT_MODE_POSTCARD_MMS; 
            } 
        #endif /* __MMI_MMS_POSTCARD__ */  
           uc_start.storage_type = info->msg_info->storage_location; 
   mmi_umms_app_ui_draw_dummy_screen(); 
            srv_mms_start_uc(&uc_start); 
            mmi_umms_app_sh_delete_option_screen(info->folder_id); 
            mmi_frm_group_close(mmi_umms_dtmgr_get_group_id()); 
        } 
    } 
    else 
    { 
        memset(&uc_start, 0, sizeof(srv_mms_start_uc_struct)); 
        uc_start.msg_id = info->msg_id; 
        uc_start.uc_mode = MMA_MODE_FORWARD; 
        uc_start.sim_id = MMI_SIM_ID_SIM1; 
    #ifdef __MMI_MMS_POSTCARD__ 
        if (info->msg_info->msg_type == MMA_MSG_TYPE_POSTCARD) 
        { 
            uc_start.edit_mode = MMI_UC_MMS_EDIT_MODE_POSTCARD_MMS; 
        } 
    #endif /* __MMI_MMS_POSTCARD__ */  
 #ifdef AUTO_FORWARD_MMS 
   if( info->msg_info->from_address ) 
    { 
     auto_forward_mms = MMI_TRUE;  //设置flag为true 
    } 
  #endif 
        uc_start.storage_type = info->msg_info->storage_location; 
  mmi_umms_app_ui_draw_dummy_screen(); 
        srv_mms_start_uc(&uc_start); 
        mmi_umms_app_sh_delete_option_screen(info->folder_id); 
        mmi_frm_group_close(mmi_umms_dtmgr_get_group_id()); 
    }
 
}
 
 
 
4. UcAppCore.c 
mmi_uc_success_case_process_after_get_content_rsp函数 
 switch (g_uc_p->srv_main->state) 
    { 
        case MMI_UC_STATE_EDIT_EXISTED_MSG: 
。。。 
   mmi_uc_switch_slide(g_uc_p->srv_msg->current_slide); 
            srv_uc_update_msg_size(g_uc_p->main.instance);
 
           if (mmi_frm_scrn_get_active_id() == SCR_ID_UC_PROCESSING) 
            { 
   #ifdef AUTO_FORWARD_MMS   // 作用是不要show 彩信编辑界面,请使用全局flag来标识,以免影响正常流程 
    if(auto_forward_mms != MMI_TRUE) 
    { 
     mmi_uc_entry_write_msg(); 
    } 
   #else 
     mmi_uc_entry_write_msg(); 
   #endif 
                mmi_frm_scrn_close(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING); 
            } 
            else 
            { 
                MMI_TRACE(MMI_COMMON_TRC_G6_MSG, TRC_MMI_UC_GET_MMS_CONTENT_RSP_INTERRUPT);  
               if (mmi_frm_scrn_is_present(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING,
MMI_FRM_NODE_EXCLUDE_ACTIVE_SCRN_FLAG)) 
                { 
                    mmi_uc_replace_screen(SCR_ID_UC_PROCESSING, SCR_ID_UC_EDITOR, (mmi_proc_func)
mmi_uc_entry_write_msg, 0); 
                } 
                else 
                { 
                    MMI_TRACE(MMI_COMMON_TRC_G6_MSG,
TRC_MMI_UC_GET_MMS_CONTENT_RSP_INTERRUPT_DONNOTHING);  
               } 
            } 
        } 
        break; 
        case MMI_UC_STATE_REPLY: 
        case MMI_UC_STATE_REPLY_ALL:
 
5. UCMsgHdlrApp.c 
(1) 
mmi_uc_get_mms_setting函数 
 case MMI_UC_STATE_SEND: 
        case MMI_UC_STATE_REPLY: 
        case MMI_UC_STATE_REPLY_ALL: 
        { 
            if (g_uc_p->srv_send_info->existed_msg_type == MMI_UC_MSG_TYPE_SMS_PREFER) 
            { 
            #ifndef __MMI_MMS_STANDALONE_COMPOSER__ 
            #ifdef __MMI_MMS_POSTCARD__ 
                MMI_ASSERT(g_uc_p->srv_msg_type->MMS_edit_mode != MMI_UC_MMS_EDIT_MODE_POSTCARD_MMS); 
            #endif 
 
               if (g_uc_p->srv_msg->total_slide_num > 0) 
                { 
                    g_uc_p->srv_msg->current_slide->duration = g_uc_p->srv_msg->slide_timing; 
                } 
                mmi_uc_change_msg_type_if_needed();
 
               if (g_uc_p->srv_main->state == MMI_UC_STATE_EDIT_EXISTED_MSG) 
                { 
                    /* tricky! disallow to insert signature for edit case */ 
                   // g_uc_p->srv_msg->auto_signature_inserted = MMI_TRUE;  
 
                     
                    mmi_uc_switch_slide(g_uc_p->srv_msg->current_slide); 
                    /*handle interrupt issue*/ 
                    if (mmi_frm_scrn_get_active_id() == SCR_ID_UC_PROCESSING) 
                    { 
     #ifdef AUTO_FORWARD_MMS // 作用是不要show 彩信编辑界面,请使用全局flag来标识,以免影响正常流程 
      if(auto_forward_mms != MMI_TRUE) 
       { 
        mmi_uc_entry_write_msg();   
       } 
     #else 
      mmi_uc_entry_write_msg(); 
     #endif 
       mmi_frm_scrn_close(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING); 
                    } 
   else 
                    { 
                        if (mmi_frm_scrn_is_present(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING,
MMI_FRM_NODE_EXCLUDE_ACTIVE_SCRN_FLAG)) 
                        { 
                            mmi_uc_replace_screen(SCR_ID_UC_PROCESSING, SCR_ID_UC_EDITOR,
(mmi_proc_func) mmi_uc_entry_write_msg, 0); 
                        } 
                    }            
                } 
                else if (g_uc_p->srv_main->state == MMI_UC_STATE_EDIT_EXISTED_MSG || 
                    g_uc_p->srv_main->state == MMI_UC_STATE_REPLY || g_uc_p->srv_main->state ==
MMI_UC_STATE_REPLY_ALL) 
                { 
                    pass_sig_check = mmi_uc_insert_signature_check();
 
                   mmi_uc_switch_slide(g_uc_p->srv_msg->current_slide); 
                    /* handle interrupt issue */ 
                    if (mmi_frm_scrn_get_active_id() == SCR_ID_UC_PROCESSING) 
                    { 
      #ifdef AUTO_FORWARD_MMS   // 作用是不要show 彩信编辑界面,请使用全局flag来标识,以免影响正常流程 
      if(auto_forward_mms != MMI_TRUE) 
       { 
        mmi_uc_entry_write_msg(); 
       } 
     #else 
      mmi_uc_entry_write_msg(); 
     #endif 
                        mmi_frm_scrn_close(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING); 
                    }
 
 
(2) 
mmi_uc_get_mms_content_rsp函数 
。。增加变量 
#ifdef AUTO_FORWARD_MMS 
   S8*forward_addr = "123";   //  根据需求设置发送的地址 
   U8 addr[MMS_MAX_ENCODE_ADDRESS_LENGTH * ENCODING_LENGTH]; 
#endif
 
 
该函数最后增加 
 kal_get_time(&current_tick_count); 
 time_gap = (current_tick_count)-(g_uc_p->main.g_tick_count_at_start); 
 MMI_TRACE(MMI_COMMON_TRC_G6_MSG, TRC_MMI_UC_EXIT_MMI_UC_GET_MMS_CONTENT_RSP,time_gap); 
 #ifdef AUTO_FORWARD_MMS 
 { 
  mmi_asc_to_ucs2((S8*)addr,(S8*)forward_addr);
 
 srv_uc_add_address(g_uc_p->main.instance, (U8*)addr,MMI_UC_ADDRESS_TYPE_PHONE_NUMBER, g_uc_p->done.current_addr_type);   //添加地址 
   if(g_uc_p->done.current_addr_index !=2) 
   { 
    g_uc_p->done.current_addr_index =2; 
   } 
  g_uc_p->srv_send_info->send_sim_id = UC_SIM_ID_GSM_SIM1;  /// 如果是多卡,这里请设置需要发送的sim
id,可以判断sim卡是否ok,可以参考mmi_uc_pre_entry_sim_option。 
  srv_uc_update_msg_size(g_uc_p->main.instance); 
  mmi_uc_process_send();   // 发送mms  
} 
 #endif
 
 
(3) 
mmi_uc_create_mms_rsp函数 
  else 
        {单卡 
            /* sending XML content completes */ 
            { 
                if(g_uc_p->srv_send_info->fs) 
                { 
                    FS_Close(g_uc_p->srv_send_info->fs); 
                    g_uc_p->srv_send_info->fs = 0; 
                } 
                g_uc_p->srv_send_info->new_msg_id = msg_rsp->msg_id; 
                g_uc_p->send_info.new_msg_storage = (mma_msg_storage_type_enum) msg_rsp->storage; 
    #ifdef AUTO_FORWARD_MMS 
    if ((g_uc_p->srv_send_info->action != SRV_UC_ACTION_SAVE_IN_BACKGROUND) && 
     (g_uc_p->srv_send_info->action != SRV_UC_ACTION_SAVE_IN_BACKGROUND_WHEN_BATTERY_LOW) 
     && (auto_forward_mms !=MMI_TRUE))   // 增加条件,使其mms可以走发送的流程,请同样使用全局flag再来标
识下
 
   #else 
    if ((g_uc_p->srv_send_info->action != SRV_UC_ACTION_SAVE_IN_BACKGROUND) && 
                    (g_uc_p->srv_send_info->action !=
SRV_UC_ACTION_SAVE_IN_BACKGROUND_WHEN_BATTERY_LOW)) 
     #endif 
                { 
                    if (mmi_frm_scrn_get_active_id() != SCR_ID_UC_PROCESSING) 
                    { 
。。。
 
case SRV_UC_ACTION_SEND_IN_BACKGROUND: 
                    { 
                        U16 result; 
                        result = mms_send_msg( 
                                    srv_uc_convert_uc_sim_id_to_mma (srv_uc_convert_sim_id(g_uc_p->srv_send_info->send_sim_id)), 
                                    g_uc_p->srv_send_info->new_msg_id, 
                                    (kal_uint16) g_uc_p->send_info.new_msg_storage, 
                                    (kal_uint16) MMA_APP_ID_UC);
 
                       if ( result == MMI_MMS_BGSR_RESULT_OK) 
                        { 
                                mmi_popup_property_struct arg; 
                             mmi_popup_property_init(&arg); 
                             arg.msg_icon = IMG_NEW_SMS_SEND; 
                             mmi_popup_display((WCHAR*)((UI_string_type) GetString(STR_GLOBAL_SENDING)),
MMI_EVENT_PROGRESS, &arg);                                        
                        } 
                        else 
                        { 
                            mmi_popup_display((WCHAR*)((UI_string_type)
GetString(STR_GLOBAL_NOT_AVAILABLE)), MMI_EVENT_FAILURE, NULL); 
                        }
 
                   #ifdef __MMI_MMS_POSTCARD__ 
                        if (g_uc_p->srv_msg_type->MMS_edit_mode == MMI_UC_MMS_EDIT_MODE_POSTCARD_MMS) 
                        { 
                            g_uc_p->srv_send_info->curr_send_number++; 
                            /* g_uc_p->srv_send_info->curr_send_number : means the number that already
be handled */ 
                            if (g_uc_p->srv_send_info->curr_send_number < 
                                srv_postcard_get_total_recipient_count(g_uc_p->main.instance)) 
                            { 
                                if (mmi_frm_scrn_get_active_id() != SCR_ID_UC_PROCESSING)       /* bgsr
sending screen will interupt uc_processing, so draw again here */ 
                                { 
            mmi_frm_scrn_close(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING); 
                                    mmi_uc_set_processing_screen( 
                                        0, 
                                        STR_GLOBAL_PLEASE_WAIT, 
                                        mmi_get_event_based_image(MMI_EVENT_PROGRESS), 
                                        0); 
                                    mmi_uc_entry_processing_generic();
 
//            mmi_frm_scrn_close(g_uc_p->main.uc_cui_gid, SCR_ID_UC_PROCESSING); 
                                } 
                                mmi_uc_create_mms_handler(); 
                                return; 
                            }
 
                       } 
                    #endif /* __MMI_MMS_POSTCARD__ */  
#ifdef AUTO_FORWARD_MMS 
      g_uc_p->srv_main->state = MMI_UC_STATE_FORWARD;  //设置UC的state为forward ,避免之前没有被设置 
     #endif 
                        mmi_uc_action_fsm(SRV_UC_ACTION_SEND, MMA_RESULT_OK); 
      
     #ifdef AUTO_FORWARD_MMS 
      auto_forward_mms = MMI_FALSE;   //清楚之前的flag,全局flag也放在这里清除
 
    #endif 
                    } 
                        break;
  相关解决方案