Ручной контроль громкости клиента Bluetooth

У меня есть Android-устройство, действующее как клиентское устройство для рук, использующее hfp.

Используя следующий код:

Я получаю звонок, а динамики и микрофон работают как ожидалось.

Моя проблема в том, что я не могу контролировать громкость.

Я попытался использовать следующие строки кода, чтобы найти правильный поток, но ни один из них не работает.

Я отслеживал команду тома, отправленную с телефона клиенту в классе HeadsetClientStateMachine, строка # 1822 по следующей ссылке: HeadsetClientStateMachine из lolipop

case EVENT_TYPE_VOLUME_CHANGED:
    if (event.valueInt == HeadsetClientHalConstants.VOLUME_TYPE_SPK) {
        mAudioManager.setStreamVolume(AudioManager.STREAM_BLUETOOTH_SCO, event.valueInt2, AudioManager.FLAG_SHOW_UI);
        mVgsFromStack = true;
       Log.d(TAG, "EventVolumeChange STREAM_BLUETOOTH_SCO value: " + event.valueInt2);
    }

Когда я меняю громкость на телефоне, я вижу журнал, показывающий обновленное значение звука, а это значит, что вызывается метод setStreamVolume(), но громкость не изменяется.

Кто-нибудь знает, что может вызвать эту проблему?

EDIT:

Я все еще ищу ответ, и теперь я смотрю на реализацию аудио HAL. Я подозреваю, что связь между HAL и звуковым драйвером некорректна... Я мало знаю о реализации на низком уровне и не уверен, что мне нужно искать.

Ответ 1

Не могли бы вы попробовать ниже. Я не пробовал себя, но звучит аналогичная проблема, если я правильно понимаю:

Громкость наушников Bluetooth Bluetooth

"Android использует int 6 для громкости Bluetooth и не документируется. Просто используйте 6 вместо AudioManager.STREAM_VOICE_CALL и попробуйте, он должен работать "

Я предполагаю, что вы замените AudioManager.STREAM_BLUETOOTH_SCO на 6.

Удачи, надеюсь, что это сработает.