私のアプリは、通常のヘッドセットで制御できます。「onKeyDown」をオーバーライドするだけです。しかし、Bluetooth ヘッドセットからの重要なイベントがキャプチャされません。なぜですか? または、Bluetoothキーイベントをキャプチャする方法は?
ヘッドセットのボタンを押すと、「log cat」に次のように表示されます。
Bluetooth AT recv(3043): AT+VGS=15
AudioPolicyManagerBase(13654): FM radio recording off
AudioService(2261): sendVolumeUpdate, isKeyguardLocked...Not to update Volume Panel.
VolumePanel(2261): change volume by MSG_VOLUME_CHANGED
VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0)
VolumePanel(2261): Call setChangeSeekbarColor(false)
メディア ボタン アクションも処理しようとしましたが、これは機能しません。私のアイデアは、自由に構成可能なキー マッピングです。ユーザーは、アプリがすべてのキー (ハードウェア、メディア ボタン、Bluetooth ヘッドセット) で聞く「セット キー」を選択し、ユーザーがキーを押すと、イベント/キー コードが構成に保存されます。
要約が機能しない 回答: ボリューム ボタンは、"VOLUME_CHANGED_ACTION" でキャプチャする必要があります。問題は、このインテントが他のアプリにブロードキャストされ、abortBroadcast() が機能しないことです (「順序付けされた」ブロードキャストでのみ機能します)。もう 1 つの問題は、ケーブル ヘッドセットと電話のキーが onReceive() を 2 回トリガーすることです (なぜですか?) Bluetooth ヘッドセットが 1 回トリガーします。次の問題は、Bluetooth ヘッドセットの 3 番目のキーです。音声コマンドをトリガーします (s-voice は s3 で始まります)。これに関するさまざまな意図をキャプチャしようとしましたが、このボタンを押しても「受信」できず、理由がわかりません。最後に、すべての種類のボタンをキャプチャし、他のアプリでそれらを処理したくない (onKeyDown を使用して true を返すなど)。