bigbaicai

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

播放音乐时来短信,只嘟一声,没有短信铃声响起

0
阅读(1348)

在播放音乐时,来短信,没有短信铃声响起,只嘟一声,原因是在来短信播放短信铃声时,会先判断当前的audio资源是否available,如果资源正在使用,则短信铃声不会播放,只播放一个beep音,即嘟一声;


如果想实现在播放音乐时,可以播放短信铃声,修改如下:
[SOLUTION]来自半导体社群


以下修改都是在notification.c文件中
1,添加下面这个函数
//add by AAAA
static MMI_BOOL is_need_to_suspend_bg_play(mmi_scenario_id noti_scen_id)
{
if (noti_scen_id == MMI_SCENARIO_ID_NEW_SMS ||
noti_scen_id == MMI_SCENARIO_ID_NEW_MMS ||
noti_scen_id == MMI_SCENARIO_ID_WAP_PUSH ||
noti_scen_id == MMI_SCENARIO_ID_REMINDER_OTHER)
{
return MMI_TRUE;
}
return MMI_FALSE;
}
//add end AAAA
2,在control_sound修改如下:
static void control_sound(
mmi_scenario_id noti_scen_id,
srv_prof_tone_enum tone_id,
mmi_noti_attr_beha_enum behavior,
mmi_nmgr_behavior_enum action,
MMI_BOOL display_scrn,
mmi_frm_nmgr_alert_snd_struct *snd_info)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
srv_prof_ret snd_result = SRV_PROF_RET_SUCCESS;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (behavior == MMI_NOTI_SND_BEHA_NO_PLAY)
{
#ifdef MMI_NOTI_MGR_UT
play_sound = MMI_FALSE;
snd_action = action;
play_sound_id = tone_id;
#endif /* MMI_NOTI_MGR_UT */
return;
}
else
{
#ifdef MMI_NOTI_MGR_UT
play_sound = MMI_TRUE;
snd_action = action;
play_sound_id = tone_id;
#endif /* MMI_NOTI_MGR_UT */
}
if (action == MMI_BEHAVIOR_SND_CUSTOM)
{
INVOKE_CUSTOM_SOUND(noti_scen_id);
}
else
{
MMI_ASSERT(action == MMI_BEHAVIOR_SND_PROFILE || action == MMI_BEHAVIOR_SND_SUBTLE || action ==
MMI_BEHAVIOR_SND_VIB_THEN_RING);
if (!srv_prof_if_can_ring())
{
return;
}
if (tone_id == SRV_PROF_TONE_NONE)
{
return;
}
//add by AAAA
if (is_need_to_suspend_bg_play(noti_scen_id) == MMI_TRUE)
{
mdi_audio_suspend_background_play();
need_resume_bk_play = MMI_TRUE;
}
//add end AAAA
if (MMI_SCENARIO_ID_REMINDER_OTHER == noti_scen_id)
{
mdi_audio_suspend_background_play();
need_resume_bk_play = MMI_TRUE;
#ifdef MOTION_SENSOR_SUPPORT
if(srv_reminder_get_sensor_listen_state(SRV_SENSOR_MOTION_TURNOVER))
{
g_nmgr_sensor_handle = srv_sensor_start_listen(
SRV_SENSOR_MOTION_TURNOVER,
NULL,
nmgr_motion_turnover_callback,
NULL);
}
#endif
}
.......
3,在nmgr_control_proc函数里添加
static mmi_ret nmgr_control_proc(mmi_event_struct *evt)
{
if (g_enable_nmgr == MMI_FALSE)
{
return MMI_RET_OK;
}
switch (evt->evt_id)
{
case SOUND_PLAY_EVT:
{
mmi_nmgr_sound_play_evt_struct *p = (mmi_nmgr_sound_play_evt_struct *)evt;
srv_prof_alert_type_enum alert_type;
srv_prof_get_current_profile_value(SRV_PROF_SETTINGS_ALERT_TYPE, (void *)&alert_type);
StopTimer(MMI_NMGR_VIB_THEN_RING_TIMER);
if (g_timer_arg != NULL)
{
mmi_mfree(g_timer_arg);
g_timer_arg = NULL;
}
if ((SRV_PROF_ALERT_TYPE_VIB_THEN_RING == alert_type) && (p->action ==
MMI_BEHAVIOR_SND_VIB_THEN_RING))
{
mmi_nmgr_sound_play_evt_struct *arg = mmi_malloc(sizeof(mmi_nmgr_sound_play_evt_struct));
g_timer_arg = arg;
arg->noti_scen_id = p->noti_scen_id;
arg->tone_id = p->tone_id;
arg->behavior = p->behavior;
arg->action = p->action;
arg->display_scrn = p->display_scrn;
StartTimerEx(MMI_NMGR_VIB_THEN_RING_TIMER, MMI_NMGR_VIB_THEN_RING_DURATION,
mmi_nmgr_vib_then_ring_timer, arg);
}
else
{
#ifdef __COSMOS_MMI_PACKAGE__
StartTimer(MMI_NOTIFICATION_AUDIO_TIMER, MMI_NOTIFY_SOUND_TIME_BOUNDARY,
mmi_frm_nmgr_control_end);
#endif
StartTimer(MMI_NMGR_VIB_THEN_RING_TIMER, MMI_NOTIFY_SOUND_TIME_BOUNDARY,
mmi_frm_nmgr_control_end);//add by AAAA
control_sound(
p->noti_scen_id,
p->tone_id,
p->behavior,
p->action,
p->display_scrn,
&p->snd_info);
}
break;
}
......
4,在void mmi_frm_nmgr_control_end(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
//add by AAAA
StopTimer(MMI_NMGR_VIB_THEN_RING_TIMER);
srv_prof_stop_tone(noti_tone_id);
noti_tone_id = NONE_TONE;
if (need_resume_bk_play == MMI_TRUE)
{
mdi_audio_resume_background_play();
need_resume_bk_play = MMI_FALSE;
}
//add end AAAA
MMI_TRACE(MMI_FW_TRC_G1_FRM, TRC_MMI_FRM_NMGR_CONTROL_SND_END, noti_tone_id);
if (!(g_nmgr_block_tone_vib & MMI_FRM_NMGR_SOUND))
{
StopTimer(MMI_NMGR_VIB_THEN_RING_TIMER);
if (g_timer_arg != NULL)
{
mmi_mfree(g_timer_arg);
g_timer_arg = NULL;
......
5,void mmi_nmgr_vib_then_ring_timer(void *arg)
{
mmi_nmgr_sound_play_evt_struct *p = (mmi_nmgr_sound_play_evt_struct *)arg;
#ifdef __COSMOS_MMI_PACKAGE__
StartTimer(MMI_NOTIFICATION_AUDIO_TIMER, MMI_NOTIFY_SOUND_TIME_BOUNDARY, mmi_frm_nmgr_control_end);
#endif
StartTimer(MMI_NOTIFICATION_SERVICE_TIMER, MMI_NOTIFY_SOUND_TIME_BOUNDARY, mmi_frm_nmgr_control_end);
//add by AAAA
control_sound(
p->noti_scen_id,
p->tone_id,
p->behavior,
p->action,
p->display_scrn,
NULL);
mmi_mfree(arg);
g_timer_arg = NULL;
}


ic设计