web-dev-qa-db-ja.com

Bluetoothハンズフリークライアントのボリュームコントロール

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

次のコードを使用:

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

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

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

次のリンクのクラスHeadsetClientStateMachineの行#1822で電話からクライアントに送信されるボリュームコマンドを追跡しました: 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);
    }
_

電話の音量を変更すると、更新されたサウンドの値を示すログが表示されます。つまり、setStreamVolume()メソッドが呼び出されていますが、音量は変更されていません。

この問題の原因は何ですか?

編集:

私はまだ答えを探しており、現在はオーディオHALの実装を検討しています。 HALとオーディオドライバーの間のリンクが何らかの形で間違っているのではないかと疑っています。低レベルの実装についてはあまり知らず、探しているものがわかりません。

79
Distwo

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

Android Bluetooth Earpiece Volume

Androidはbluetoothボリュームにint 6を使用しており、ドキュメント化されていません。AudioManager.STREAM_VOICE_CALLの代わりに6を使用して試してください。動作するはずです "

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

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

2
Adi