10A event mechanism
来源:互联网 发布:文博会淘宝财富故事 编辑:程序博客网 时间:2024/05/15 11:46
转自 http://wenku.baidu.com/view/f1e9c3bdfd0a79563c1e7235.html
event机制是MTK feature phone平台10A代码里面的最重要的机制之一.当某一个函数或者功能模块post或者send一个event之后,相关的就收函数就会去接收这个event然后做出相关的动作。
问题在于:我们自己怎样使用event机制?怎样自己定义event,并使其得到认可(即生效)?怎样传递和接收? 可以通过以下步骤来实现自己定义event:
一、event的定义
在相关的.h文件中枚举自己的event 例如:
#ifdef __HQ_WIDGET_FMRADIO_EVENT_HANDLE__
在相关的.h文件中枚举自己的event 例如:
#ifdef __HQ_WIDGET_FMRADIO_EVENT_HANDLE__
typedef enum
{
FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0,
FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0,
FMRADIO_WIDGET_STATE_EXTERNAL_PLAY
}FMRADIO_WIDGET_STATE_EXTERNAL_EVENT;
#endif
定义了2个event,一个是FMRADIO_WIDGET_STATE_EXTERNAL_NONE,一个是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY,一般的FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0作为默认的event枚举的第一个,是无效的event,在此event枚举中有效的event是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY。
二、event的有效化
通过以下方式,主要是函数MMI_FRM_INIT_EVENT,来合法化自己定义的event。 例如如下代码:
mmi_event_struct event; //定义event结构体
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);//将自己定义的event初始化到event结构体中,是自己定义的event得到有效化。
定义了2个event,一个是FMRADIO_WIDGET_STATE_EXTERNAL_NONE,一个是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY,一般的FMRADIO_WIDGET_STATE_EXTERNAL_NONE = 0作为默认的event枚举的第一个,是无效的event,在此event枚举中有效的event是FMRADIO_WIDGET_STATE_EXTERNAL_PLAY。
二、event的有效化
通过以下方式,主要是函数MMI_FRM_INIT_EVENT,来合法化自己定义的event。 例如如下代码:
mmi_event_struct event; //定义event结构体
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);//将自己定义的event初始化到event结构体中,是自己定义的event得到有效化。
三、event的发送
自己定义event的目的就是用来传递,是接受函数做出需要的反应。
自己定义event的目的就是用来传递,是接受函数做出需要的反应。
可以通过以下方式来传递自己的event到指定的接受函数:
mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);//event的发出。将event结构体的地址传给函数Wgui_fmply_widget_event_handler,该函数就是event的接受函数,(可以自己实现)。其中event结构体是第二步中的结构体,该结构体中有自己定义的event。
或者
mmi_frm_send_event(mmi_event_struct * evt,mmi_proc_func proc,void * user_data)也可以发送event,
send和post是event的两种不同的发送方式而已
所以第二步第三步的代码应该写在一起,如下所示:
mmi_event_struct event;
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);
mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);//或者用函 数mmi_frm_send_event,用哪一个根据实际(需要post还是send)情况决定。
关键之处就在于:寻找到合适的event发出点,也就是说在哪个地方发出自己需要的event,这是很重要的,否则达不到自己期望的效果。也就是说以下代码
mmi_event_struct event;
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);
mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);
mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);//或者用函 数mmi_frm_send_event,用哪一个根据实际(需要post还是send)情况决定。
关键之处就在于:寻找到合适的event发出点,也就是说在哪个地方发出自己需要的event,这是很重要的,否则达不到自己期望的效果。也就是说以下代码
mmi_event_struct event;
MMI_FRM_INIT_EVENT(&event, FMRADIO_WIDGET_STATE_EXTERNAL_PLAY);
mmi_frm_post_event((mmi_event_struct*)(&event), Wgui_fmply_widget_event_handler,NULL);
//或者用函数mmi_frm_send_event,用哪一个根据实际(需要post还是send)情况决定。 往哪加很重要。
四、event的接受
第三步中函数Wgui_fmply_widget_event_handler为接收函数,该函数可以自己定义。
mmi_ret Wgui_fmply_widget_event_handler(mmi_event_struct *evt) { switch(evt->evt_id)
第三步中函数Wgui_fmply_widget_event_handler为接收函数,该函数可以自己定义。
mmi_ret Wgui_fmply_widget_event_handler(mmi_event_struct *evt) { switch(evt->evt_id)
{
case FMRADIO_WIDGET_STATE_EXTERNAL_PLAY:
case FMRADIO_WIDGET_STATE_EXTERNAL_PLAY:
{
wgui_widget_fm_button_draw(&button[POWER_BUTTON]);//接收到FMRADIO_WIDGET_STATE_EXTERNAL_PLAY //之后要做出的动作,该函数也可自己实现
wgui_widget_fm_button_draw(&button[POWER_BUTTON]);//接收到FMRADIO_WIDGET_STATE_EXTERNAL_PLAY //之后要做出的动作,该函数也可自己实现
break;
}
default:
break;
}
return MMI_OK;
}
}
- 10A event mechanism
- Clutter event handle mechanism
- My own JScript Event Register mechanism
- A new I/O memory access mechanism
- A new I/O memory access mechanism
- exception as a control flow mechanism
- exception as a control flow mechanism
- except as a control flow mechanism
- An Improved Differential Evolution with a Novel Restart Mechanism
- a big event
- a sample of delegate & event
- A sample for COM Event
- ClassLoader Mechanism
- ClassLoader Mechanism
- Login Mechanism
- ClassLoader Mechanism
- Installation Mechanism
- __attribute__ mechanism
- error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
- 自己做的autocomplete控件
- Thinking in java学习2
- 快照技术原理讲解
- 全局变量
- 10A event mechanism
- [TI DLP Buglist]data type error in illum_EnableIllumination function
- 数据库学习心得体会
- android UI随输入法自动调整(改变)
- 沙盒目录下创建文件夹
- 线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法 .
- restlet2.1 学习笔记(十)使用自定义SecretVerifier验证用户名与密码
- android电池驱动
- mac系统命令行窗口输入javac命令,输出中文乱码得问题