[英]It is possible to stream voice from phone mic to Bluetooth speaker using HFP or HSP (api level 19-22)?
[英]Using a Bluetooth Headset as a Mic and Speaker in a Voice Chat App
我有一個語音聊天應用程序,可以正常工作。 目前,我正在嘗試使該應用程序支持藍牙耳機,以防萬一已連接藍牙耳機。 我需要處理兩種情況:
對於第一種情況,應用程序應自動開始使用耳機作為其默認輸入/輸出音頻設備。 另一方面,在將耳機連接到設備后,該應用程序應從當前的輸入/輸出音頻設備切換到藍牙耳機。
我可以使用以下代碼成功處理第一種情況:
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.