setStreamMute无法Mute部分stream
最近在写Android的Audio代码时发现,setStreamMute对一些stream type没有效果。例如alarm stream。
后调查发现,在set stream mute的时候会调用函数isStreamAffectedByMute来判断指定的stream是否可以mute。
函数isStreamAffectedByMute中使用mMuteAffectedStreams进行判断。
return (mMuteAffectedStreams & (1 << streamType)) != 0;
mMuteAffectedStreams在函数readPersistedSettings中被赋值:
mMuteAffectedStreams = System.getInt(cr,
System.MUTE_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
函数loadVolumeLevels中对此进行了设定:
loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
((1 << AudioManager.STREAM_MUSIC) |
(1 << AudioManager.STREAM_RING) |
(1 << AudioManager.STREAM_NOTIFICATION) |
(1 << AudioManager.STREAM_SYSTEM)));
如果要使某种stream可被mute,在此处添加该stream即可。
后调查发现,在set stream mute的时候会调用函数isStreamAffectedByMute来判断指定的stream是否可以mute。
函数isStreamAffectedByMute中使用mMuteAffectedStreams进行判断。
return (mMuteAffectedStreams & (1 << streamType)) != 0;
mMuteAffectedStreams在函数readPersistedSettings中被赋值:
mMuteAffectedStreams = System.getInt(cr,
System.MUTE_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
函数loadVolumeLevels中对此进行了设定:
loadSetting(stmt, Settings.System.MUTE_STREAMS_AFFECTED,
((1 << AudioManager.STREAM_MUSIC) |
(1 << AudioManager.STREAM_RING) |
(1 << AudioManager.STREAM_NOTIFICATION) |
(1 << AudioManager.STREAM_SYSTEM)));
如果要使某种stream可被mute,在此处添加该stream即可。