Android 在语音聊天应用程序中将蓝牙耳机用作麦克风和扬声器
我有一个语音聊天应用程序,它工作得很好。目前,我正在尝试使应用程序支持蓝牙耳机,以防任何连接。我需要处理两种情况:Android 在语音聊天应用程序中将蓝牙耳机用作麦克风和扬声器,android,bluetooth,voip,Android,Bluetooth,Voip,我有一个语音聊天应用程序,它工作得很好。目前,我正在尝试使应用程序支持蓝牙耳机,以防任何连接。我需要处理两种情况: 蓝牙耳机在通话开始前已连接 蓝牙耳机在通话过程中连接到设备 对于第一种情况,应用程序应自动开始使用耳机作为默认的输入/输出音频设备。另一方面,当耳机连接到设备时,应用程序应该从当前的输入/输出音频设备切换到蓝牙耳机 我使用以下代码成功地处理了第一个案例: mAudioManager.setMode(0); mAudioManager.startBluetoothSco(); mAu
mAudioManager.setMode(0);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);
mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
至于第二种情况,我创建了一个广播接收器
,它在蓝牙耳机连接时监听,如下所示:
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);
}
}
};
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);
}
}
};
broadcastReceiver
能够检测到耳机连接/断开,并且通话将声音定向到耳机,而不是手机的听筒问题在于,应用程序一直使用设备的麦克风作为输入音频设备,而不是耳机的。经过长时间的检查,我意识到当广播接收器
收到耳机已连接的通知时,我需要稍等片刻,然后再调用mAudioManager.startBluetoothSco()编码>
以使应用程序使用耳机的麦克风
问题是,在知道蓝牙耳机已连接后,我应该收听什么样的事件,以便开始从耳机的麦克风捕获声音?结果是我不应该收听
蓝牙设备。操作\u ACL\u已连接
,而我应该考虑的是<代码> BuLotoOutHead。ActhnOnCalpNo.StAtEyx更改。广播接收器
应按如下方式初始化:
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);
}
}
};
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);
}
}
};