Bluetoothハンズフリークライアントの音量調節


80

hfpを使用してハンズフリークライアントデバイスとして機能するAndroidデバイスがあります。

次のコードを使用します。

電話を受けることができ、スピーカーとマイクは期待どおりに機能しています。

私の問題は、音量を制御できないように見えることです。

次のコード行を使用して正しいストリームを見つけようとしましたが、どれも機能していないようです。

電話からクラスのクライアントに送信されているボリュームコマンドを追跡しHeadsetClientStateMachineました。次のリンクの行#1822:lolipopのHeadsetClientStateMachine

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()メソッドが呼び出されていることを意味しますが、音量は変更されません。

誰かがこの問題を引き起こしている可能性があることを知っていますか?

編集:

私はまだ答えを探しており、現在オーディオHALの実装に目を向けています。HALとオーディオドライバ間のリンクがどういうわけか間違っているのではないかと思います...低レベルの実装についてはよくわからず、何を探すべきかわかりません。


1
言及するのを忘れました:HFPClientクラスはKitkatに存在しません:android.googlesource.com/platform/frameworks/base / + /…それらはロリポップからバックポートされたので、私が使用するコードはロリポップの実装と同じです。
Distwo 2015

1
たぶん、私は今その方向に調査しています。並行して、ボリュームを制御できないHFPクライアントプロファイルを持つAndroidの既知の動作があるかどうか疑問に思いました。
Distwo 2015

1
奇妙な部分は、サウンドが機能し、Bluetoothの音量変更イベントが渡され、setStreamVolume()メソッドが本来の方法で呼び出されていることです。ちょうど...音量を調整するように見えることはできません
Distwo

さまざまなハードウェアでテストしましたが、カスタムROMがサポートするのはそれだけであるため、すべて同じアーキテクチャを使用しています...
Distwo 2015

これに問題に関連するものがあるのだろうか:android.googlesource.com/platform/hardware/libhardware
+ /…

回答:


3

以下をお試しください。私は自分自身を試しませんでしたが、正しく理解していれば同様の問題に聞こえます:

AndroidBluetoothイヤピースボリューム

AndroidはBluetoothボリュームにint6を使用しており、文書化されていません。AudioManager.STREAM_VOICE_CALLの代わりに6を使用して試してみてください、動作するはずです

AudioManager.STREAM_BLUETOOTH_SCOを6に置き換えることになると思います。

頑張って、うまくいくことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.