马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?快速注册
x
" o, d/ f# _( r3 A最近在公司项目中遇到一个问题,描述如下:
" g& ?, u2 p% T/ U5 g Z" u打开应用播放音乐,调节音量键,此时调节的是多媒体音量(Stream_Music)。(因为启动播放器之前都设置了控制的音频类型。。); q; b* N, a* E4 V) ^1 n k
为了更清楚看到问题,先把多媒体音量调到0。然后连接上蓝牙设备,此时系统音频会自动输出到蓝牙耳机,调节音量时影响到的是蓝牙多媒体音量。; a, L# P& h( |: S! `
接下来如果有电话接入,在响铃过程中通过AudioTrack播报语音提示:7 s) ?% D8 o1 o1 W& @, \3 Y$ l% y2 S+ {
if (ringPlay) {& R1 [/ b* _1 w' L
streamType = AudioManager.STREAM_RING;
( Q/ }/ \# S( K$ r N} else {2 ~: L. W+ O2 ~2 r" [- }; p& [) z
streamType = AudioManager.STREAM_MUSIC;
% g5 \4 ^+ z7 J* Z+ }% x, \}
. n/ ]3 d, V1 g! GmAudio = new AudioTrack(streamType, mSampleRate, AudioFormat.CHANNEL_OUT_MONO,
0 ^* s/ [; X: d5 w2 YAudioFormat.ENCODING_PCM_16BIT, mBuffSize, AudioTrack.MODE_STREAM);3 C6 w1 X2 }* \6 v. {, I4 J0 K
mAudio.play();
$ B" W; o4 D6 `2 s ~( N}
% v* q, ^+ M9 _; r响铃状态下是通过 STREAM_RING进行播报的,其它情况是走的 STREAM_MUSIC。4 C) @6 [3 G- a
在其它情况下,播报提示音后都可以重新恢复播放音乐;但在来电响铃播报提示音后, 播放器是已经打开,但没有声音。(其实就是音频通道走的本地的多媒体,而不是蓝牙的多媒体)* L" E2 b$ V! y/ [
现象出来了,如果去掉语音播报的代码,一起正常。6 d' F# ~( }( b
有怀疑过提示音播报时,是不是蓝牙音频通道断了。调用 isBluetoothA2dpOn():检查A2DPAudio是否通过蓝牙耳机;
1 ~5 o9 k) `" ^' i" n显示true,应该可以断定不是蓝牙耳机失去连接导致。) q. ]; J: k3 D8 L2 Z5 G
这过程中发现,通过手动调节音频键后,立马恢复正常。
+ p3 A( u# {7 P纠集很长时间,没搞明白啥问题。。。/ Z3 Y2 ~! W5 A" N. o- t& r0 x
不过最后,还是解决了:9 D! I9 j$ h; }! I1 g% ]' \
在提示因播报完成后,重新设置:0 z" l: m4 A; [
mAudioManager.setMode(AudioManager.MODE_NORMAL);- d! Z: R2 Z8 o
mAudioManager.setStreamVolume(streamType, mAudioManager.getStreamVolume(streamType), 0);1 `" i+ @+ n0 {1 Y3 f" c
对其中的原因并不是很清楚,而且不同手机效果不同。
% ^* n) _/ G( }2 l' N增加第一句,在三星、HTC上都好使,但小米上不行。而单独添加第二句在小米上正常。测试过程中也发现,小米的音频焦点控制跟原声系统有差别,我原先的MusicAPP在小米上无法使用,主要涉及音频焦点压栈上不同。. {, \1 U! |3 X( Y
参考:: O. O" ^" h4 `- \2 T$ X6 r) x* \
http://stackoverflow.com/questio ... -call-interferences
% }: \0 t: h) u- P; s0 `/ |0 G hhttp://stackoverflow.com/questio ... demode-normal-fails |
|
|
|
|