Как установить выходное аудиоустройство для Android OpenSL ES?

Делаю плеер, который должен играть только через наушники (проводные или Bluetooth), но не через динамик. Если отключить наушники во время воспроизведения, проигрыватель автоматически ставится на паузу. Когда (Bluetooth) наушники снова подключены и я получаю событие ACTION_AUDIO_STATE_CHANGED, я возобновляю воспроизведение. Но несколько секунд звук идет через встроенный динамик и только потом идет в наушники. Думаю исправить это, настроив устройство на вывод. Я могу получить идентификатор устройства из AudioManager. Но как передать его в OpenSL ES?

А может есть способ полностью запретить воспроизведение через встроенный динамик?

Или другой способ решить эту проблему?

P.S. Санта, где ты, когда ты так нужен? Помоги мне, пожалуйста!


person MaxF    schedule 20.12.2018    source источник
comment
Вы нашли способ заставить OpenSL играть через нужное устройство?   -  person rpattabi    schedule 21.12.2020


Ответы (1)


Возможно, вы могли бы прослушать этот другой тип событий с помощью BroadcastReceiver:

BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED -> {
            state = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, -1)
            when (state) {
                BluetoothA2dp.STATE_CONNECTED -> {
                    // Do something
                }
                BluetoothA2dp.STATE_DISCONNECTED -> {
                    // Do something else
                }
            }
        }
person Alejandro H. Cruz    schedule 27.12.2018
comment
Я пробовал. К сожалению, это не помогает. Слишком рано выстрелил. Но спасибо за ответ. - person MaxF; 30.12.2018
comment
Но это ближе к идеальной работе, чем ACTION_AUDIO_STATE_CHANGED. Думаю, меня заставят воспроизводить звук через задержку. - person MaxF; 30.12.2018
comment
Насколько велика задержка? - person Alejandro H. Cruz; 03.01.2019
comment
Не более 1 секунды, но для этого приложения нельзя издавать громкие звуки. - person MaxF; 08.01.2019