EVT_APP_MESSAGE消息的处理
编写:陈希(Alan Chen)
时间:2004年5月26日
平台:BREW 2.0
EVT_APP_MESSAGE一般用于两个方面:
其一是BREW短信到达后,BREW应用管理器将向目标应用程序发送该事件,dwParam是启动参数的地址(可以没有),程序将根据需要完成对该事件的处理。
其二是使用ITAPI_SendSMS()向目标应用程序发送该事件,如果pszDst设置为NULL,同时clsDst为非零值(代表另一个存在应用程序),那么ITAPI_SendSMS()将发送EVT_APP_MESSAGE事件给这个指定的目标应用程序,这个过程是在本地手机完成的,没有通过无线网络。dwParam将包含pszMsg。其返回值和ISHELL_SendEvent()相同。回调函数不会被调用,因为这只是一个本地的消息发送。之后的处理过程和第一方面相同。
EVT_APP_MESSAGE针对自身和其它应用程序的不同处理方式
1. 对自身应用程序的处理
比方,应用程序已经运行,并且处于主界面上,如果这时候一个BREW短信到达,我希望能够显示一个提醒界面,但实际情况确没有。经我分析,发现应用程序在收到EVT_APP_MESSAGE消息后,只是简单的使用ISHELL_StartAppletArgs()启动应用程序,如果该程序已经运行的情况下,界面是不会发生任何变化,流程不会做任何改变。代码如下:
char * lpszMsg = (char *)dwParam;
int ret;
ret = ISHELL_StartAppletArgs(pApp->m_pIShell, AEECLSID_HELLOWORLDAPP, lpszMsg);
return TRUE;
但是我希望界面发生变化。为了解决这个问题,我需要对ISHELL_StartAppletArgs()函数的返回值进行判断。如下:
char * lpszMsg = (char *)dwParam;
int ret;
ret = ISHELL_StartAppletArgs(pApp->m_pIShell, AEECLSID_HELLOWORLDAPP, lpszMsg);
if (ret == EFAILED)
{
//显示一个提醒界面
}
return TRUE;
如果应用程序没有启动,那么ISHELL_StartAppletArgs()函数的返回值是SUCCESS,经过判断不会显示提醒界面;如果应用程序已经启动了,那么其返回值将是EFAILED,则会显示提醒界面。
2. 对其它应用程序的处理
同样道理,如果应用程序A再收到EVT_APP_MESSAGE消息后,启动的是应用程序B,那么条件是判断是否已经启动了,否则的话,则启动应用程序B,应用程序A进入suspend状态。代码如下:
char * lpszMsg = (char *)dwParam;
int ret;
ret = ISHELL_StartAppletArgs(pApp->m_pIShell, AEECLSID_HELLOWORLDAPP2, lpszMsg);
if (ret == EALREADY)
{
//显示一个提醒界面,应用程序已经启动了
}
return TRUE;