所以,我有一个需要使用扬声器和麦克风的应用程序 . 它必须使用和不使用蓝牙 . 基本上,当连接蓝牙耳机或汽车的免提系统时,我希望应用程序通过蓝牙使用扬声器和麦克风(这是棘手的部分),而不是 - 手机的扬声器和麦克风 .

最初我希望离开平台的经理,但是...它适用于扬声器,但不适用于麦克风 . 即使扬声器切换到蓝牙,它仍然继续使用手机的麦克风 .

我添加了对 startBluetoothSco() and setBluetoothScoOn() 的调用并且它变得更好 - 现在它实际上适用于耳机,但是...不是与汽车_2959438的免提系统 .

我怀疑(但我甚至不知道如何检查)这与汽车呈现为两个蓝牙设备 - 媒体播放器和耳机这一事实有关 .

任何智慧的话?我完全迷失在这里... Android的AudioManager蓝牙控制API总是一团糟......

更新 - 这是我正在使用的代码:

private static boolean isBluetoothHeadsetConnected() {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
            && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
}

private boolean checkBlueTooth()  {
    if (!isBluetoothHeadsetConnected()) {
        return false;
    }

    return true;
}

private void useBluetooth() {
    AudioManager audioManager;
    audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    audioManager.startBluetoothSco();
    audioManager.setBluetoothScoOn(true);
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (checkBlueTooth()) {
        start();
    } else {
        BroadcastReceiver scoReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1) ==
                        AudioManager.SCO_AUDIO_STATE_CONNECTED) {
                    start();
                }
            }
        };
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);

        this.registerReceiver(scoReceiver, intentFilter);
        useBluetooth();
    }
}