VIA 冲突管理 (selle)

  VIA平台中,有很多冲突的情况,如电话时来短信,或闹钟;播放MP3或MP4时来电话或短信,此时就要处理其冲突事件的优先级,来达到希望的处理顺序.

以此为例:当像录像的时候,如果此时闹铃响起或来新短信,录像则会停止并且退出.现在想让它继续录像,只是有一声提示,录像结束后给出提示.
查看Camera的代码:
int32
CameraAppC::
OnSuspend()
{
 GetCameraMode()->CameraSuspend();
 return 0;
}
int32
CameraAppC::OnResume()
{
 GetCameraMode()->CameraResume();
 return 0;
}
void
CameraAppC::
OnEventSuspend(uint32 Event, int32 RunBackground)
{
 Event = Event;
 RunBackground =
RunBackground;
 GetCameraMode()->CameraExit();
}
void
CameraAppC::OnEventResume(uint32 Event, int32 Param)
{
 Event = Event;
 Param = Param;
 GetCameraMode()->CameraResume();
}
闹铃响起时,应该是触发了 OnEventSuspend () ,
即使我屏蔽掉了OnEventSuspend,闹铃依旧会响起,只是没有打断当前录相,并且退出后,闹铃己经响过.
后来资讯VIA的郑工(师傅:)
,VIA有自己的冲突管理优先级顺序,客户可调,在uiconflictmanager.cpp的ConflictTable中定义:如下
 CONFILICT_EVENT_CAMERA,        
CONFLICT_EVENT_VOICE_CALL,      CONFLICT_ACTION_C,
 CONFILICT_EVENT_CAMERA,         CONFLICT_EVENT_ALARM,           CONFLICT_ACTION_C,
 CONFILICT_EVENT_CAMERA,        
CONFLICT_EVENT_CALENDAR,        CONFLICT_ACTION_C,
如第二行,当前是在CAMERA拍照或录像的时候,来了ALARM,则执行的测略为CONFLICT_ACTION_C,见其定义:
 CONFLICT_ACTION_A,         
// Continue processing FirstEvent,
                             
// notify and not process SecondEvent
 CONFLICT_ACTION_B,         
// Continue processing FirstEvent,
                             
// process SecondEvent in background
CONFLICT_ACTION_C,         
// Suspend FirstEvent,
                             
// process SecondEvent in foreground
不难看出,若改为CONFLICT_ACTION_A则出现预期的状态.
PS:Uiconflictmanager
是如何跟据这个表,来决定是否调用OnEventSuspend()VIA又是如何在中断后恢复操作OnEventResume()的,下回分解…

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据