最近在做蓝牙音箱开发,在 A2DP 和 HFP 来回切换的时候,遇到了手机兼容性的问题。最终发现设备收声和手机收声,是因为 soc 切换有问题。原先在网上找了一些资料发现其实还蛮简单的。就两句话,当时没想这么多就直接写了,发现还真能从设备收声,然后就没管了。然后客户反馈很多手机不能从设备收声,尤其是三星、华为最为严重。好吧,查了很多资料,同时跟嵌入式开发对代码。 SOC 都连接上了,还是不行。最终发现手机在切换的时候,需要设置 AudioManager 的模式:
MODE_NORMAL
: 普通模式,既不是铃声模式也不是通话模式MODE_RINGTONE
: 铃声模式MODE_IN_CALL
: 通话模式MODE_IN_COMMUNICATION
: 通信模式,包括音/视频,VoIP通话.(3.0加入的,与通话模式类似)
1、开启 SCO 录音
public void startSCO() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);