关于同时链接USB耳机与蓝牙耳机时,麦克风数据只走USB不走蓝牙耳机

   mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

 private void openSco(){
        if (!mAudioManager.isBluetoothScoAvailableOffCall()) {
            Log.d(TAG, "系统不支持蓝牙录音");
            return;
        }
        //mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        //蓝牙录音的关键,启动SCO连接,耳机话筒才起作用
        mAudioManager.stopBluetoothSco();
        mAudioManager.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) {
                    mAudioManager.setBluetoothScoOn(true);  //打开SCO
                    //voiceRecogniton();//开始语音识别
                    unregisterReceiver(this);  //别遗漏
                } else {//等待一秒后再尝试启动SCO
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    mAudioManager.startBluetoothSco();
                }
            }
        }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED));
    }

  private void closeSco() {
        if(mAudioManager.isBluetoothScoOn()){
            mAudioManager.setBluetoothScoOn(false);
            mAudioManager.stopBluetoothSco();
        }
    }
 

猜你喜欢

转载自blog.csdn.net/guliang28/article/details/116752398