MTK应用入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MTK MMI应用入门:
1、初始化例程,注册一系列处理函数,比如协议事件处理函数、按键事件处理函数、消息
事件处理函数、选中菜单处理函数等等。
2、选中菜单处理函数(Highlight Handler functions)。即根据用户的定义,选择某菜单时需要
执行的函数。
3、完成入口函数(Entry functions)。即当前应用被其他应用覆盖,其他应用结束后回到当前
应用所需要调用的函数。
4、完成退出函数(Exit functions)。即当前应用被其他应用覆盖时,为保存当前应用的一些现
场数据而需要调用的函数。
5、完成业务逻辑,在不同screen之间的进行切换调用。
MMI 采用screen流的方式进行屏幕之间的转换,进入新的screen之前,执行被覆盖screen 的exit函数,并将相关信息存入历史记录,然后进入新的screen, 从新的screen退出后从history数据库取出上一screen的信息,进入其entry函数。
以下代码片段的API都是系统提供的,可在头文件中找到其原形。
初始化函数代码片断:
//以下两个API参考eventGprot.h
V oid MMSInitialization(void)
{
//设事件处理函数如下闹钟超时处理时间
SetProtocolEventHandler(AlmExpiryHandler, MSG_ID_MMI_EQ_ALARM_IND);
//设置Highlight Handler函数当点mms菜单后调用相应函数HighlightMMSHandler SetHiliteHandler (MESSAGES_MENU_MMS_MENUID, HighlightMMSHandler);
}
入口函数代码片断:
// 本例为进入短信主菜单的处理函数相关接口函数可在对应的头文件中查找
void EntrySMSMainMenuList (void)
{
U8* guiBuffer;
U16 nStrItemList[MAX_SUB_MENUS];
U16 numItems;
U16 itemIcons[MAX_SUB_MENUS];
U8* popUpList[MAX_SUB_MENUS];
U32 menuItemId=-1;
U32 menuItemId1=-1;
U32 maskingByte=-1;
U8** pPopUpList=NULL;
//进入入口函数必须首先调用EntryNewScreen, 该函数执行上一屏幕的退出函数,并记录当前屏幕的入口和退出函数
EntryNewScreen(SCR_ID_MSG_SMS_MAIN_MENU, mmi_msg_exit_generic, EntrySMSMainMenuList, NULL);
//设置当前screen ID
SetMessagesCurrScrnID(SCR_ID_MSG_SMS_MAIN_MENU);
//获取当前screen 的gui buffer,用于被当前screen被覆盖后存入历史记录guiBuffer = GetCurrGuiBuffer (SCR_ID_MSG_SMS_MAIN_MENU);
//设置当前screen的父menu ID
SetParentHandler (MESSAGES_MENU_SMS_MENUID);
//注册Highlighthandler处理函数
RegisterHighlightHandler (ExecuteCurrHiliteHandler);
//获取当前菜单子菜单数目
numItems = GetNumOfChild (MESSAGES_MENU_SMS_MENUID);
//获取子菜单的string
GetSequenceStringIds(MESSAGES_MENU_SMS_MENUID, nStrItemList);
//获取子菜单Icon
GetSequenceImageIds(MESSAGES_MENU_SMS_MENUID, itemIcons);
mmi_msg_set_msg_num_hint (msgbox_info.totalinbox, msgbox_info.totaloutbox, msgbox_info.totaldraftbox);
ConstructHintsList(MESSAGES_MENU_SMS_MENUID, popUpList);
mmi_msg_set_msg_menu_highlight_handler();
if (g_msg_cntx.msg_init)
{
pPopUpList = popUpList;
}
else
{
pPopUpList = NULL;
}
menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_INBOX_MENUID);
if(menuItemId!=-1)
{
if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_MT))
{
ResetBit(maskingByte,menuItemId/*1*/);
}
}
menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_WMESSAGE_MENU_ID);
menuItemId1=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENU ID, MESSAGES_MENU_OUTBOX_MENUID);
if(menuItemId!=-1 && menuItemId1!=-1)
{
if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_MO)) {
ResetBit(maskingByte, menuItemId/*0*/);
ResetBit(maskingByte,menuItemId1/*2*/);
}
}
menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_CB_MENUID);
if(menuItemId!=-1)
{
if(IsResetCSPGroupService(CSP_TELESERVICES_SERVICE_GROUP,CSP_SM_CB)) ResetBit(maskingByte,menuItemId/*6*/);
}
menuItemId=GetChildMenuIDIndexByParentMenuID(MESSAGES_MENU_SMS_MENUI D, MESSAGES_MENU_VMAIL_MENUID);
if(menuItemId!=-1)
{
if(IsResetCSPGroupService(CSP_V ALUE_ADDED_SERVICES_SERVICE_GROUP,CSP_ VPS))
ResetBit(maskingByte,menuItemId/*5*/);
}
MaskStringItems(popUpList,(U8)numItems,maskingByte);
MaskItems(itemIcons,(U8)numItems,maskingByte);
numItems=MaskItems(nStrItemList,(U8)numItems,maskingByte);
MaskHiliteItems(MAIN_MENU_MESSAGES_MENUID, maskingByte);
g_msg_cntx.currBoxIndex=0;
// show category 函数,将上面准备好的参数传递进去,show当前screen ,show category 系统已经提供了足够多风格的函数选择,可根据需要调用对应的showcategory函数.
ShowCategory52Screen (STR_SMS_MENUENTRY, IMG_SMS_ENTRY_SCRN_CAPTION,
STR_GLOBAL_OK, IMG_SMS_COMMON_NOIMAGE,
STR_GLOBAL_BACK, IMG_SMS_COMMON_NOIMAGE,