Переключение AudiManager с Bluetooth на EAR_PIECE не работает

У меня есть кнопка, которая должна переключаться с НАУШНИКА на ДИНАМИК, затем на BLUETOOTH и так далее.

Это мой код:

 fun setSpeakerValue(value: SIPManager.AUDIO) {
        speaker = value
        when (value) {
            SIPManager.AUDIO.EAR_PIECE -> {
                Log.i("Speaker", "Speaker1 EARPIECE")
                binding.callItemIconSpeaker.setImageResource(R.drawable.speaker_off)
                if (SIPManager.isBluetoothConnected()) {
                    audioManager?.isBluetoothScoOn = false
                    audioManager?.stopBluetoothSco()
                }
                audioManager?.mode = AudioManager.MODE_NORMAL
                audioManager?.isSpeakerphoneOn = false
            }
            SIPManager.AUDIO.SPEAKER -> {
                Log.i("Speaker", "Speaker1 SPEAKER")
                binding.callItemIconSpeaker.setImageResource(R.drawable.speaker_on)
                if (SIPManager.isBluetoothConnected()) {
                    audioManager?.isBluetoothScoOn = false
                    audioManager?.stopBluetoothSco()
                }
                audioManager?.mode = AudioManager.MODE_IN_COMMUNICATION
                audioManager?.isSpeakerphoneOn = true
            }
            SIPManager.AUDIO.BLUETOOTH -> {
                Log.i("Speaker", "Speaker1 BLUETOOTH")
                binding.callItemIconSpeaker.setImageResource(android.R.drawable.stat_sys_data_bluetooth)
                audioManager?.mode = AudioManager.MODE_NORMAL
                audioManager?.isSpeakerphoneOn = false
                audioManager?.startBluetoothSco()
                audioManager?.isBluetoothScoOn = true
            }
        }
    }

Но когда даже я перехожу к наушнику, я останавливаю BluetoothSCO, ставлю isSpeakerOn в false, но после этого я начинаю слышать в блютуз вместо разговорного динамика телефона. Что я делаю не так?


person rosu alin    schedule 01.10.2019    source источник
comment
некоторые варианты, которые приходят мне на ум 1. переместить audioManager?.isBluetoothScoOn = ложное утверждение вне области if 2. у вас есть отдельный флаг/логическое значение для AUDIO.EAR_PIECE 3. вы уверены, что BluetoothSCO отключен (можно подтвердить из журналов )?   -  person Manivannan Radhakannan    schedule 04.10.2019
comment
1. Не помогает, если я выношу его на улицу. 2. У меня нет булева, это просто ENUM, который я использую с 3 состояниями SIPManager.AUDIO.* 3. Сейчас проверю, но при нажатии кнопки я слышу на гарнитуре звуковой сигнал, что она отключена, и только через пару секунд снова начинается Мое предположение, что в режиме audioManager'а есть канал и после того, как он настроен на BLUETOOTH, при попытке EAR_PIECE будет то же самое? Я не уверен, пробовал использовать разные режимы для каждого типа, но либо 1 не работает должным образом, либо другой   -  person rosu alin    schedule 07.10.2019
comment
Может возникнуть проблема с задержкой при установке и разрыве соединения Bluetooth. Помогает ли добавление задержки после подключения и отключения Bluetooth?   -  person Manivannan Radhakannan    schedule 07.10.2019
comment
Я проверю после того, как закончу свою текущую задачу, и дам вам знать   -  person rosu alin    schedule 07.10.2019
comment
Я заставил это работать, используя пример из моего ответа. Также добавлена ​​ссылка на исходный вопрос.   -  person rosu alin    schedule 30.10.2019


Ответы (1)


Получил это, используя ответ отсюда: Как переключить аудиовыход с телефона, динамика телефона, наушников или устройства Bluetooth

 //For BT
        mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
        mAudioManager.startBluetoothSco();
        mAudioManager.setBluetoothScoOn(true);
    } else if(true) {
        //For phone ear piece
        mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
        mAudioManager.stopBluetoothSco();
        mAudioManager.setBluetoothScoOn(false);
        mAudioManager.setSpeakerphoneOn(false);
    } else {
        //For phone speaker(loudspeaker)
        mAudioManager.setMode(AudioManager.MODE_NORMAL);
        mAudioManager.stopBluetoothSco();
        mAudioManager.setBluetoothScoOn(false);
        mAudioManager.setSpeakerphoneOn(true);
    }
person rosu alin    schedule 30.10.2019