Ho un dispositivo Android che funziona come un dispositivo client vivavoce che utilizza hfp.Controllo del volume per il client Bluetooth senza mani
sono in grado di ricevere una chiamata e gli altoparlanti e il microfono funzionino come previsto.
Il mio problema è che non riesco a controllare il volume.
Ho provato a utilizzare le seguenti righe di codice per trovare lo stream corretto, ma nessuno di essi sembra funzionare.
ho rintracciato il comando del volume viene inviato dal telefono al cliente nella classe HeadsetClientStateMachine
, linea # 1822 nel seguente link: HeadsetClientStateMachine from 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);
}
Quando cambio il volume al telefono, io vedo il registro che mostra il valore aggiornato del suono, il che significa che viene chiamato il metodo setStreamVolume()
, ma il volume non cambia.
Qualcuno sa che cosa potrebbe causare questo problema?
EDIT:
Sto ancora cercando una risposta e ora sto guardando verso l'attuazione HAL audio. Sospetto che il collegamento tra l'HAL e il driver audio sia in qualche modo errato ... Non so molto sull'implementazione di basso livello e non sono sicuro di cosa dovrei cercare.
Ho dimenticato di menzionare: Le classi HFPClient non sono presenti in Kitkat: https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/core/java/android/bluetooth/ erano tornate portato da lollipop, quindi il codice che uso è lo stesso dell'implementazione di lecca-lecca. – Distwo
Pensi che questo potrebbe causare il problema? –
Potrebbe essere, sto indagando in quella direzione in questo momento. In parallelo mi chiedevo se esistesse un comportamento noto di Android con profilo client HFP che impediva il controllo del volume. – Distwo