當我嘗試通過STREAM_RING播放聲音或文本到語音的聲音並插入耳機時,聲音將在揚聲器和耳機上播放。 這似乎是Android框架默認行爲,但我想有聲音只在耳機玩的時候就插好。奇怪的音頻管理器行爲setSpeakerphoneOn
所以我儘量控制這樣的狀態揚聲器播放聲音之前。
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官方參考文獻對這些行爲沒有提到,所以我無法清楚地理解它們。
當然,我已經聲明<使用許可權的android:NAME = 「android.permission.MODIFY_AUDIO_SETTINGS」/ >。