Я занимаюсь разработкой приложения для чата Android VoIP, основанного на встроенных библиотеках WebRTC. Требуется работать одновременно с любой фоновой музыкой, воспроизводимой в данный момент с использованием гарнитуры BT.
У нас есть следующее:
- BT-гарнитура подключена
- фоновая музыка играет из любого музыкального приложения, мы слышим ее через наушники гарнитуры
Мое приложение инициализирует звук так:
audioManager.setMode(AudioManager.MODE_NORMAL);
Также пробовал MODE_IN_COMMUNICATION, но он мгновенно устанавливает плохое качество вывода (как webRTC, так и музыки), что недопустимо. Тогда у нас есть два случая:
1) Использование
audioManager.setSpeakerphoneOn(false);
audioManager.setBluetoothScoOn(true);
audioManager.setMicrophoneMute(false);
audioManager.startBluetoothSco();
приводит к остановке воспроизведения музыки.
2) Не используется startBluetoothSco () и другие строки выше - приводит к хорошему воспроизведению музыки с выходом webRTC, но webRTC использует микрофон устройства вместо одного на гарнитуре
Требуемое поведение заключается в том, что музыка продолжает воспроизводиться через BT вместе с выводом webRTC и сбором голоса с микрофона гарнитуры. Есть идеи как этого достичь?
PS. AudioManager.requestAudioFocus () определенно понадобится в будущем, чтобы реагировать на запросы других голосовых приложений, просто хотел максимально упростить вопрос. Но в случае, если это имеет значение, я пытался не использовать его или использовать следующим образом, оба не решают проблему:
audioManager.requestAudioFocus(audioFocusChangeListener,
AudioManager.STREAM_VOICE_CALL,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);