254969084 发表于 2015-12-28

播报提示音后导致音频焦点丢失


最近在公司项目中遇到一个问题,描述如下:
打开应用播放音乐,调节音量键,此时调节的是多媒体音量(Stream_Music)。(因为启动播放器之前都设置了控制的音频类型。。)
为了更清楚看到问题,先把多媒体音量调到0。然后连接上蓝牙设备,此时系统音频会自动输出到蓝牙耳机,调节音量时影响到的是蓝牙多媒体音量。
接下来如果有电话接入,在响铃过程中通过AudioTrack播报语音提示:
if (ringPlay) {
streamType = AudioManager.STREAM_RING;
} else {
streamType = AudioManager.STREAM_MUSIC;
}
mAudio = new AudioTrack(streamType, mSampleRate, AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT, mBuffSize, AudioTrack.MODE_STREAM);
mAudio.play();
}
响铃状态下是通过 STREAM_RING进行播报的,其它情况是走的 STREAM_MUSIC。
在其它情况下,播报提示音后都可以重新恢复播放音乐;但在来电响铃播报提示音后, 播放器是已经打开,但没有声音。(其实就是音频通道走的本地的多媒体,而不是蓝牙的多媒体)
现象出来了,如果去掉语音播报的代码,一起正常。
有怀疑过提示音播报时,是不是蓝牙音频通道断了。调用 isBluetoothA2dpOn():检查A2DPAudio是否通过蓝牙耳机;
显示true,应该可以断定不是蓝牙耳机失去连接导致。
这过程中发现,通过手动调节音频键后,立马恢复正常。
纠集很长时间,没搞明白啥问题。。。
不过最后,还是解决了:
在提示因播报完成后,重新设置:
mAudioManager.setMode(AudioManager.MODE_NORMAL);
mAudioManager.setStreamVolume(streamType, mAudioManager.getStreamVolume(streamType), 0);
对其中的原因并不是很清楚,而且不同手机效果不同。
增加第一句,在三星、HTC上都好使,但小米上不行。而单独添加第二句在小米上正常。测试过程中也发现,小米的音频焦点控制跟原声系统有差别,我原先的MusicAPP在小米上无法使用,主要涉及音频焦点压栈上不同。
参考:
http://stackoverflow.com/questions/15180257/audiomanager-mode-in-call-interferences
http://stackoverflow.com/questions/24435141/android-audiomanager-setmodemode-normal-fails
页: [1]
查看完整版本: 播报提示音后导致音频焦点丢失