最近客户反馈,手机连接蓝牙耳机后,app内的视频通话功能没有声音,但是播放音乐是正常的。发现原来是没有打开sco通道。解决方法如下:
private void openSco(){ if (!audioManager.isBluetoothScoAvailableOffCall()) { Log.d(TAG, "系统不支持蓝牙录音"); return; } //mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); //蓝牙录音的关键,启动SCO连接,耳机话筒才起作用 audioManager.stopBluetoothSco(); audioManager.startBluetoothSco(); //蓝牙SCO连接建立需要时间,连接建立后会发出ACTION_SCO_AUDIO_STATE_CHANGED消息,通过接收该消息而进入后续逻辑。 //也有可能此时SCO已经建立,则不会收到上述消息,可以startBluetoothSco()前先 //stopBluetoothSco() registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) { audioManager.setBluetoothScoOn(true); //打开SCO unregisterReceiver(this); //别遗漏 } else {//等待一秒后再尝试启动SCO try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } audioManager.startBluetoothSco(); } } }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)); } private void closeSco() { if(audioManager.isBluetoothScoOn()){ audioManager.setBluetoothScoOn(false); audioManager.stopBluetoothSco(); } }
退出后要把sco关掉,恢复正常模式