【发布时间】:2015-08-13 19:58:17
【问题描述】:
当我尝试通过 STREAM_RING 播放声音或 Text-To-Speech 声音并且我的耳机已插入时,声音将在免提电话和耳机上播放。 这似乎是 Android 框架的默认行为,但我希望在插入耳机时只在耳机上播放声音。
所以我尝试在播放声音之前像这样控制扬声器状态。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setSpeakerphoneOn(false);
但这还不够,并且无法在我的 Nexus5(Kitkat 4.4.4)上运行。 经过一番谷歌搜索,我发现一些解决方案建议使用 AudioManager#setMode(int)。 所以代码会是这样的。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_IN_CALL);
am.setSpeakerphoneOn(false);
基本上这段代码可以满足我的要求,但是声音不稳定并且经常断断续续。 事实证明,下面的代码完全没问题,声音没有中断。
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_INVALID);
am.setSpeakerphoneOn(false);
我不知道为什么 MODE_IN_CALL 会导致声音不稳定,而 MODE_INVALID 效果很好。 首先,我不知道为什么要调用 AudioManager#setMode(int) 来关闭免提电话。
有人知道吗? Android官方参考对这些行为只字未提,因此我无法清楚地理解它们。
当然我已经声明了
【问题讨论】:
标签: java android audio android-audiomanager