AudioManager中有几种流类型。它们在低水平上有什么不同?会不会是AudioManager之类的用法?STREAM_MUSIC阻塞输入麦克风流?还是别的什么?
最重要的区别是音量控制。
正如文档所说,我们可以分别为每个流设置音量级别或调整音量。
我们可以控制"音频焦点",让其他应用程序停止播放或降低音量,这样我们就可以在特定的流上清晰地播放声音,或者声音不会阻塞其他高优先级的声音,如电话铃声,导航语音反馈或类似的东西。
对于可能播放音频的多个应用程序,考虑它们应该如何交互是很重要的。为了避免每个音乐应用同时播放,Android使用音频焦点来调节音频播放——只有持有音频焦点的应用才能播放音频。
另一个未提及的事情是哪个音频设备将产生声音。
使用STREAM_MUSIC,声音将通过一个连接到手机的音频设备(电话扬声器,耳机,蓝牙扬声器或其他东西)产生。
使用STREAM_RING,声音将通过连接到手机的所有音频设备产生。
像往常一样,无论你谷歌不记录的东西(有时)都可以从代码
中理解。https://android.googlesource.com/platform/frameworks/base/+/00 ccd5d026fcd0e4b9d27dc5a9ffa13ca0408449/媒体/java/android/媒体/AudioService.java
至于阻塞,并不是流相互阻塞,只是模式阻塞了东西。MODE_IN_COMMUNICATION阻塞了大部分流。
闪避:一种普通的"礼貌";当播放长时间运行的流(例如音乐)时的行为是听音频焦点回调并手动降低流的音量。事件。当焦点返回到你的流时,音量应该恢复到之前的水平。
流类型影响在给定时间内流对所有声音总和的贡献:
/** @hide Maximum volume index values for audio streams */
private int[] MAX_STREAM_VOLUME = new int[] {
5, // STREAM_VOICE_CALL
7, // STREAM_SYSTEM
7, // STREAM_RING
15, // STREAM_MUSIC
7, // STREAM_ALARM
7, // STREAM_NOTIFICATION
15, // STREAM_BLUETOOTH_SCO
7, // STREAM_SYSTEM_ENFORCED
15, // STREAM_DTMF
15 // STREAM_TTS
这个来自AudioService.java的数组显示了给定流的默认最大音量。其他代码:
private void readPersistedSettings() {
final ContentResolver cr = mContentResolver;
mRingerMode = System.getInt(cr, System.MODE_RINGER, AudioManager.RINGER_MODE_NORMAL);
mVibrateSetting = System.getInt(cr, System.VIBRATE_ON, 0);
mRingerModeAffectedStreams = Settings.System.getInt(cr,
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_NOTIFICATION)|
(1 << AudioSystem.STREAM_SYSTEM)|(1 << AudioSystem.STREAM_SYSTEM_ENFORCED)));
mMuteAffectedStreams = System.getInt(cr,
System.MUTE_STREAMS_AFFECTED,
((1 << AudioSystem.STREAM_MUSIC)|(1 << AudioSystem.STREAM_RING)|(1 << AudioSystem.STREAM_SYSTEM)));
mNotificationsUseRingVolume = System.getInt(cr,
Settings.System.NOTIFICATIONS_USE_RING_VOLUME, 1);
似乎表明当电话开始"振铃"或通话正在进行时,哪些流的音量被静音或减小。
STREAM_ALARM The audio stream for alarms
STREAM_DTMF The audio stream for DTMF Tones
STREAM_MUSIC The audio stream for music playback
STREAM_NOTIFICATION The audio stream for notifications
STREAM_RING The audio stream for the phone ring
STREAM_SYSTEM The audio stream for system sounds
STREAM_VOICE_CALL The audio stream for phone calls
从http://developer.android.com/reference/android/media/AudioManager.html