Tengo un dispositivo Android que actúa como un dispositivo cliente de manos libres usando hfp.
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.
fuente
Respuestas:
¿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.
fuente