Regulacja głośności klienta głośnomówiącego Bluetooth

80

Mam urządzenie z Androidem działające jako urządzenie klienckie bez użycia rąk przy użyciu technologii HFP.

Używając poniższego kodu:

Jestem w stanie odebrać telefon, a głośniki i mikrofon działają zgodnie z oczekiwaniami.

Mój problem polega na tym, że nie mogę kontrolować głośności.

Próbowałem użyć następujących wierszy kodu, aby znaleźć właściwy strumień, ale żaden z nich nie działa.

Śledziłem polecenie głośności wysyłane z telefonu do klienta w klasie HeadsetClientStateMachine, wiersz nr 1822 w poniższym linku: HeadsetClientStateMachine z 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);
    }

Kiedy zmieniam głośność w telefonie, widzę dziennik pokazujący zaktualizowaną wartość dźwięku, co oznacza, że setStreamVolume()metoda jest wywoływana, ale głośność się nie zmienia.

Czy ktoś wie, co może być przyczyną tego problemu?

EDYTOWAĆ:

Wciąż szukam odpowiedzi i teraz szukam implementacji audio HAL. Podejrzewam, że powiązanie między HAL a sterownikiem audio jest jakoś niepoprawne ... Nie wiem zbyt wiele o implementacji niskiego poziomu i nie jestem pewien, czego powinienem szukać.

Distwo
źródło
1
Zapomniałem wspomnieć: Klasy HFPClient nie są obecne w Kitkat: android.googlesource.com/platform/frameworks/base/+/… zostały przeniesione z Lollipopa, więc kod, którego używam, jest taki sam jak implementacja Lollipopa.
Distwo,
1
Możliwe, że teraz badam ten kierunek. Równolegle zastanawiałem się, czy istnieje znane zachowanie Androida z profilem klienta HFP, które uniemożliwia mu kontrolowanie głośności.
Distwo,
1
Dziwne jest to, że dźwięk działa, zdarzenie zmiany głośności bluetooth jest przekazywane, a metoda setStreamVolume () jest wywoływana tak, jak powinna. Po prostu nie wydaje się, aby wyregulować głośność ...
Distwo,
Testowałem na innym sprzęcie, ale wszystkie mają tę samą architekturę, ponieważ jest to jedyny, który obsługuje mój niestandardowy rom ...
Distwo
Ciekawe, czy to ma coś związanego z problemem: android.googlesource.com/platform/hardware/libhardware/+/…
Distwo

Odpowiedzi:

3

Czy mógłbyś spróbować poniżej. Nie próbowałem sam, ale brzmi podobnie, jeśli dobrze rozumiem:

Głośność słuchawki Bluetooth z systemem Android

Android używa int 6 do regulacji głośności Bluetooth i nie jest udokumentowany. Po prostu użyj 6 zamiast AudioManager.STREAM_VOICE_CALL i spróbuj, powinno działać

Zakładam, że zamienisz AudioManager.STREAM_BLUETOOTH_SCO na 6.

Powodzenia, mam nadzieję, że zadziała.

Adi
źródło