簡體   English   中英

在語音聊天應用程序中將藍牙耳機用作麥克風和揚聲器

[英]Using a Bluetooth Headset as a Mic and Speaker in a Voice Chat App

我有一個語音聊天應用程序,可以正常工作。 目前,我正在嘗試使該應用程序支持藍牙耳機,以防萬一已連接藍牙耳機。 我需要處理兩種情況:

  1. 通話開始前已連接了藍牙耳機。
  2. 通話期間,藍牙耳機將連接到設備。

對於第一種情況,應用程序應自動開始使用耳機作為其默認輸入/輸出音頻設備。 另一方面,在將耳機連接到設備后,該應用程序應從當前的輸入/輸出音頻設備切換到藍牙耳機。

我可以使用以下代碼成功處理第一種情況:

mAudioManager.setMode(0);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);
mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);

至於第二種情況,我創建了一個BroadcastReciever ,它在連接藍牙耳機時進行監聽,如下所示:

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
            mAudioManager.setMode(0);
            mAudioManager.startBluetoothSco();
            mAudioManager.setBluetoothScoOn(true);
            mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
        } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
            mAudioManager.setMode(0);
            mAudioManager.startBluetoothSco();
            mAudioManager.setBluetoothScoOn(false);
            mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
        }
    }
};

BroadcastReciever能夠檢測到耳機的連接/斷開,並且呼叫將聲音定向到耳機而不是電話的聽筒。 問題是該應用程序繼續使用設備的麥克風作為輸入音頻設備,而不是耳機的麥克風 經過很長時間的檢查,我意識到當BroadcastReciever收到連接耳機的通知時, 我需要稍等片刻,然后再調用mAudioManager.startBluetoothSco(); 使應用程序使用頭戴式耳機的麥克風。

問題是,知道藍牙耳機已連接后,我應該聽哪種事件,以便我可以開始從耳機的麥克風捕獲聲音?

事實證明,我不應該收聽BluetoothDevice.ACTION_ACL_CONNECTED ,而我應該考慮的是BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED BroadcastReciever應該初始化如下:

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
            int state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, -1);
            boolean result = state == BluetoothHeadset.STATE_CONNECTED;
            mCallback.onConnected(result);
        }
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM