Control de volumen de cliente manos libres Bluetooth

80

Tengo un dispositivo Android que actúa como un dispositivo cliente de manos libres usando hfp.

Usando el siguiente código:

Puedo recibir una llamada y los altavoces y el micrófono funcionan como se esperaba.

Mi problema es que parece que no puedo controlar el volumen.

Intenté usar las siguientes líneas de código para encontrar la secuencia correcta, pero ninguna parece funcionar.

Rastreé el comando de volumen que se envía desde el teléfono al cliente en la clase HeadsetClientStateMachine, línea # 1822 en el siguiente enlace: HeadsetClientStateMachine de 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);
    }

Cuando cambio el volumen en el teléfono, veo el registro que muestra el valor actualizado del sonido, lo que significa que setStreamVolume()se está llamando al método, pero el volumen no cambia.

¿Alguien sabe qué podría estar causando este problema?

EDITAR:

Todavía estoy buscando una respuesta y ahora estoy mirando hacia la implementación de audio HAL. Sospecho que el vínculo entre HAL y el controlador de audio es de alguna manera incorrecto ... No sé mucho sobre la implementación de bajo nivel y no estoy seguro de qué debería estar buscando.

Distwo
fuente
1
Olvidé mencionar: Las clases de HFPClient no están presentes en Kitkat: android.googlesource.com/platform/frameworks/base/+/… fueron transferidas desde lollipop, por lo que el código que utilizo es el mismo que el de la implementación de lollipop.
Distwo
1
Podría ser, estoy investigando en esa dirección ahora mismo. En paralelo, me preguntaba si existía un comportamiento conocido de Android con perfil de cliente HFP que le impidiera controlar el volumen.
Distwo
1
La parte extraña es que el sonido funciona, se está pasando el evento de cambio de volumen de bluetooth y se está llamando al método setStreamVolume () como debería ser. Parece que no puede ajustar el volumen ...
Distwo
He probado en hardware diferente, pero todos con la misma arquitectura, ya que es el único que admite mi rom personalizada ...
Distwo
Me pregunto si esto tiene algo relacionado con el problema: android.googlesource.com/platform/hardware/libhardware/+/…
Distwo

Respuestas:

3

¿Podría intentarlo a continuación? No lo probé yo mismo, pero suena un problema similar si entiendo correctamente:

Volumen del auricular Bluetooth de Android

" Android está usando int 6 para el volumen de bluetooth y no está documentado. Solo usa 6 en lugar de AudioManager.STREAM_VOICE_CALL y prueba, debería funcionar "

Supongo que reemplazará AudioManager.STREAM_BLUETOOTH_SCO con 6.

Buena suerte, espero que funcione.

Adi
fuente