某个预置的java应用如果需要开机后马上启动,可以参考如下方法。适用于Pluto的项目。
[SOLUTION]
思路:
1、 客制化java启动入口。
2、 将入口放置在进入idle后调用。
参考代码:
"IdleAdapter.c"
1. kal_bool first_bootup = KAL_TRUE;
2. mmi_idle_handle_idle_group_enter()最后
...
if (!is_idle_init_done)
{
TurnOffBacklight();
StartLEDPatternBackGround();
#if defined(OBIGO_Q03C) && defined(WAP_SUPPORT)
MMIProcessActionMsg();
#endif
mmi_sim_rearrange_menu_item();
#ifdef __MMI_AUTO_ANSWER_MACHINE__
mmi_autoam_init_statusicon();
#endif
is_idle_init_done = MMI_TRUE;
}
if(first_bootup)
{
first_bootup = KAL_FALSE;
my();
}
return MMI_RET_OK;
}
"JavaAgencyGProt.h"
3. extern void my_send_mid_getlist_req(int mids_index);
"JavaAgencySrc.c"
4. void my_send_mid_getlist_req(int mids_index)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_java_mid_getlist_req_struct *msg;
g_java.mids_index = mids_index;//The index of running midlet
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (mmi_java_need_block_msg())
{
mmi_java_display_push_busy();
return;
}
#ifndef __MVM__
if (mmi_java_check_and_display_is_busy())
{
return;
}
#endif /*__MVM__*/
/* sometime will quickly re-entry this function before
java handle this message */
if ((g_java.msg_ctrl & SEND_MID_GET_LIST_CTRL)||(g_java.msg_ctrl & SEND_MIDS_GET_LIST_CTRL))
{
return;
}
else
{
g_java.msg_ctrl |= SEND_MID_GET_LIST_CTRL;
}
//must change mids_root
if(mmi_wcslen((const U16 *)g_java.mids_info[mids_index].storage_name) < 127)
{
mmi_wcscpy((U16 *) g_mmi_java_current_selected_mids_root, (const U16
*)g_java.mids_info[mids_index].storage_name);
}
else
{
mmi_wcsncpy((U16 *) g_mmi_java_current_selected_mids_root, (const U16
*)g_java.mids_info[mids_index].storage_name, 127);
}
ClearInputEventHandler(MMI_DEVICE_ALL);
MMI_TRACE(MMI_TRACE_FUNC, MMI_JAVA_SEND_MID_GETLIST_REQ);
msg = (mmi_java_mid_getlist_req_struct*)
OslConstructDataPtr(sizeof(mmi_java_mid_getlist_req_struct));
msg->session_id = 0;
msg->game_type = GAMETYPE_JAVA_GAME;
msg->extend_mode = KAL_FALSE;
msg->mids_id = g_java.mids_info[g_java.mids_index - g_java.mids_info_start].mids_id;
mmi_java_send_message(MOD_MMI, MOD_JAM, MMI_J2ME_SAP,
MSG_ID_MMI_JAVA_MID_GETLIST_REQ, msg, NULL);
}
"MainMenu.c"
5. #include "JavaAgencyProt.h"
#include "JavaAgencyGProt.h"
6.
extern java_context_struct g_java;
void my(void){
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
int mids_index = 1;//启动第二个java应用,index从0(第一个java应用)开始
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_java.mids_info_end = g_java.mids_info_start = -1;
g_java.mids_list_filter.filter_type = JAM_NONE_FILTER;
needToSendGetListReq = MMI_TRUE;
mmi_java_fetch_mids_list(0,(UI_string_type)NULL,(PU8 *)NULL,0);
my_send_mid_getlist_req(mids_index);
}
[SOLUTION]
思路:
1、 客制化java启动入口。
2、 将入口放置在进入idle后调用。
参考代码:
"IdleAdapter.c"
1. kal_bool first_bootup = KAL_TRUE;
2. mmi_idle_handle_idle_group_enter()最后
...
if (!is_idle_init_done)
{
TurnOffBacklight();
StartLEDPatternBackGround();
#if defined(OBIGO_Q03C) && defined(WAP_SUPPORT)
MMIProcessActionMsg();
#endif
mmi_sim_rearrange_menu_item();
#ifdef __MMI_AUTO_ANSWER_MACHINE__
mmi_autoam_init_statusicon();
#endif
is_idle_init_done = MMI_TRUE;
}
if(first_bootup)
{
first_bootup = KAL_FALSE;
my();
}
return MMI_RET_OK;
}
"JavaAgencyGProt.h"
3. extern void my_send_mid_getlist_req(int mids_index);
"JavaAgencySrc.c"
4. void my_send_mid_getlist_req(int mids_index)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_java_mid_getlist_req_struct *msg;
g_java.mids_index = mids_index;//The index of running midlet
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (mmi_java_need_block_msg())
{
mmi_java_display_push_busy();
return;
}
#ifndef __MVM__
if (mmi_java_check_and_display_is_busy())
{
return;
}
#endif /*__MVM__*/
/* sometime will quickly re-entry this function before
java handle this message */
if ((g_java.msg_ctrl & SEND_MID_GET_LIST_CTRL)||(g_java.msg_ctrl & SEND_MIDS_GET_LIST_CTRL))
{
return;
}
else
{
g_java.msg_ctrl |= SEND_MID_GET_LIST_CTRL;
}
//must change mids_root
if(mmi_wcslen((const U16 *)g_java.mids_info[mids_index].storage_name) < 127)
{
mmi_wcscpy((U16 *) g_mmi_java_current_selected_mids_root, (const U16
*)g_java.mids_info[mids_index].storage_name);
}
else
{
mmi_wcsncpy((U16 *) g_mmi_java_current_selected_mids_root, (const U16
*)g_java.mids_info[mids_index].storage_name, 127);
}
ClearInputEventHandler(MMI_DEVICE_ALL);
MMI_TRACE(MMI_TRACE_FUNC, MMI_JAVA_SEND_MID_GETLIST_REQ);
msg = (mmi_java_mid_getlist_req_struct*)
OslConstructDataPtr(sizeof(mmi_java_mid_getlist_req_struct));
msg->session_id = 0;
msg->game_type = GAMETYPE_JAVA_GAME;
msg->extend_mode = KAL_FALSE;
msg->mids_id = g_java.mids_info[g_java.mids_index - g_java.mids_info_start].mids_id;
mmi_java_send_message(MOD_MMI, MOD_JAM, MMI_J2ME_SAP,
MSG_ID_MMI_JAVA_MID_GETLIST_REQ, msg, NULL);
}
"MainMenu.c"
5. #include "JavaAgencyProt.h"
#include "JavaAgencyGProt.h"
6.
extern java_context_struct g_java;
void my(void){
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
int mids_index = 1;//启动第二个java应用,index从0(第一个java应用)开始
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_java.mids_info_end = g_java.mids_info_start = -1;
g_java.mids_list_filter.filter_type = JAM_NONE_FILTER;
needToSendGetListReq = MMI_TRUE;
mmi_java_fetch_mids_list(0,(UI_string_type)NULL,(PU8 *)NULL,0);
my_send_mid_getlist_req(mids_index);
}