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即可。

你可能感兴趣的:(android,Stream,System,audio)