在Pluto的项目中,Java可以单独设置音量。但是当Java音量设置为OFF时,仍然可以听到Warning/Error/Alarm等系统提示音。
[SOLUTION]
分析:
对于warning/error/alarm声音来说,不是通过Java的MMAPI播放的,而是通过JUI的接口,参考的也不是java audio level而是系统的ring level。因此,即使Java音量关闭,还是能听到正常的系统提示音。
如果需要统一参考java audio level,在java audio level为0时不播放系统提示音,可以参照如下修改。
kal_bool jui_widget_play_sound(kal_int32 soundType)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
aud_play_id_struct id_param;
med_result_enum result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(JVM_TRACE_TYPE_JUI, FUNC_J2ME_JUI_WIDGET_PLAY_SOUND, soundType,
jam_get_ring_volume_level());
kal_prompt_trace(MOD_J2ME, "global audio level is %d", jam_get_aud_volume_level());
//begin
/* If mute, return directly */
//if (jam_get_ring_volume_level() == 0)
if (jam_get_aud_volume_level() == 0)
{
kal_prompt_trace(MOD_J2ME, "because audio level is 0, then no ring tone");
return KAL_TRUE;
}
//end
if ((soundType == JUI_ALERT_WARNING) || (soundType == JUI_ALERT_ERROR) || (soundType ==
JUI_ALERT_ALARM))
{
switch (soundType)
{
case JUI_ALERT_WARNING:
id_param.audio_id = (U8) TONE_WARNING1;
break;
case JUI_ALERT_ERROR:
id_param.audio_id = (U8) TONE_ERROR1;
break;
default:
id_param.audio_id = (U8) TONE_WARNING1;
break;
}
id_param.play_style = 0;
id_param.volume = jam_get_ring_volume_level();
id_param.output_path = MDI_DEVICE_SPEAKER2;
id_param.identifier = 0;
result = (med_result_enum) media_aud_play_id(stack_int_get_active_module_id(), &id_param);
kal_trace(JVM_TRACE_TYPE_JUI,FUNC_J2ME_JUI_WIDGET_PLAY_SOUND_RESULT,result);
return KAL_TRUE;
}
else
{
kal_trace(JVM_TRACE_TYPE_JUI,FUNC_J2ME_JUI_WIDGET_PLAY_SOUND_RESULT,-1);
return KAL_FALSE;
}
}