如何在Android上使用特定的蓝牙设备麦克风?

时间:2017-11-02 16:18:00

标签: android bluetooth android-bluetooth voice-recognition microphone

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

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

我添加了对startBluetoothSco() and setBluetoothScoOn()的呼叫并且它变得更好了 - 现在它实际上适用于耳机,但是...不是汽车的免提系统。虽然使用耳机但它确实使用蓝牙麦克风,但它不适用于汽车的免提系统。

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

任何智慧的话语?我完全迷失在这里...... 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();
    }
}

0 个答案:

没有答案