How to use Bluetooth headset for both audio input and output?

I’m making a game which requires constant use of the microphone. I want to give players on Android and iOS the option to use Bluetooth headsets when they play.

It appears that there are 2 possible protocols with which to communicate with the headset: SCO and A2DP. By default, the A2DP protocol is used and I can hear audio through the headset but the microphone is disabled, and the game takes input from the built-in phone mic. If I get the Android AudioManager and start SCO, the game will pick up input through the Bluetooth headset, but I stop hearing audio output altogether.

Is there any way for me to use the Bluetooth headset for both input and output simultaneously? Thanks for any help!

Update: I did find a way to have input and output running through the Bluetooth headset simultaneously, by switching the Android AudioManager’s mode to “in communication”. My understanding is that this makes the phone think of the game as a phone call, which has the brutal side effect of making all the game audio sound like hold music. I’d much rather disallow Bluetooth headsets than destroy the game’s audio quality to such a degree. However, if anyone reading has any alternative suggestions, I’d love to hear them!

Hi BadDreamGames,

We were wondering if this issue changed at all with the different output modes? FMOD defaults to FMOD_OUTPUTTYPE_AAUDIO on android, but perhaps with FMOD_OUTPUTTYPE_OPENSL this wouldn’t be an issue?

There is also FMOD_OUTPUTTYPE_AUDIOTRACK which doesn’t have microphone support if you are implementing your own handling for this.

I just tested using an ERUW headset and a One Plus 5 phone and wasn’t able to reproduce any of the mentioned issues using either AAudio or OpenSL. What devices are you testing on?