bigbaicai

芯方式是以半导体人、电子工程师等电子行业相关领域从业人员为核心的知识经验学习、分享、交流社群。 凭借开放、合作、共赢的运营理念,聚集了来自国内外知名院校和顶尖科技公司的半导体人、电子工程师。 我们致力于营造专业、认真、有温度的分享交流环境,将高质量的内容和方案成规模地生产和分享,帮助个人和团队在芯方式找到有价值的Key。 http://www.icfans.com/

主菜单上添加JAVA应用的快捷方式

0
阅读(1195)

[DESCRIPTION]
适用于所有版本
如何在主菜单上添加JAVA应用的快捷方式。
[SOLUTION]icfans
1) 首先, Java 获取Java 应用list 的流程:
1. 进入到java游戏主菜单的时候会发送消息MSG_ID_MMI_JAVA_MIDS_GETLIST_REQ去得到所有midlets, 并通过
mids_Id去标示每一个midlet;
然后在进入选项菜单后点击launch, 这时候会发送消息MSG_ID_MMI_JAVA_MID_GETLIST_REQ去得到当前高亮的这个
midlet的信息;
接下来MOD_JAM 会发送MSG_ID_MMI_JAVA_MID_GETLIST_CNF去通知MMI, 在这个cnf的响应函数中则会再发送
MSG_ID_MMI_JAVA_MID_START_REQ去start这个midlet;
所以mmi_java_fetch_mids_list(0, (UI_string_type) NULL, (PU8*) NULL, 0); 去得到所有mids的数据, 但是需要给
needToSendGetListReq赋值为TRUE, 并初始化g_java.mids_info_end = g_java.mids_info_start = -1; (这是因为这
些值都是全局变量, 会在其他地方进行改变), 然后在自行写一个函数类似于
mmi_java_send_mid_getlist_req; 只是在该函数中需要将 msg->mids_id 及g_java.mids_index 的值固定;
msg_mids_id及g_java_mids_index的值都表示是哪一个midlet, 但由于使用的地方不同, 所以都必须在这个函数中写死
; 请注意这个mids_id是从1开始, 而mids_index是从0开始;
最好把midlet的值固定,可以采用默认安装的方式来固定。不然安装新的midlet时,其mids_id会改变。
这样就可以直接运行指定mids_id的midlet了. 谢谢!
2) 在mainmenu 中加入菜单,类似 ***java game,然后设置entry screen 的处理函数,参考代码如下:
3) 新增加获取get list 的函数:
void mmi_java_send_mid_getlist_req(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mmi_java_mid_getlist_req_struct *msg;
g_java.mids_index = 0;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
ClearInputEventHandler(MMI_DEVICE_ALL);
if (mmi_java_check_and_display_is_busy())
{
g_java.is_select_after_install = MMI_FALSE;
return;
}
/* sometime will quickly re-entry this function before
java handle this message */
if (g_java.msg_ctrl & SEND_MID_GET_LIST_CTRL)
{
return;
}
else
{
g_java.msg_ctrl |= SEND_MID_GET_LIST_CTRL;
}
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->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);
}
4) Java 的entry function:半导体
void EntryScrSettingMenu(void)
{
if (jam_is_pause_mode() || jam_is_minimize_mode())
{
mmi_java_entry_resume_dialog();
return;
}
g_java.mids_info_end = g_java.mids_info_start = -1;
needToSendGetListReq = MMI_TRUE;
mmi_java_fetch_mids_list(0, (UI_string_type) NULL, (PU8*) NULL, 0);
my_send_mid_getlist_req();
}
这样点击主菜单的setting菜单后, 就会自动运行第一个midlet了.