У меня есть приложение для голосового чата, которое отлично работает. В настоящее время я пытаюсь сделать так, чтобы приложение поддерживало bluetooth-гарнитуры, если какая-либо из них была подключена. Мне нужно разобраться с двумя случаями:
- Bluetooth-гарнитура подключена до начала вызова.
- Bluetooth-гарнитура подключается к устройству во время разговора.
В первом случае приложение должно автоматически начать использовать гарнитуру в качестве аудиоустройства ввода / вывода по умолчанию. С другой стороны, приложение при подключении гарнитуры к устройству должно переключаться с текущего аудиоустройства ввода / вывода на гарнитуру Bluetooth.
Мне удалось успешно обработать первый случай, используя следующий код:
mAudioManager.setMode(0);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);
mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
Что касается второго случая, я создал BroadcastReciever
, который прослушивает, когда Bluetooth-гарнитура подключена, следующим образом:
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();
, чтобы приложение использовало микрофон гарнитуры. ,
Вопрос в том, какое событие я должен слушать после того, как узнаю, что Bluetooth-гарнитура подключена, чтобы я мог начать захватывать голос с микрофона гарнитуры?