19

私のアプリは、通常のヘッドセットで制御できます。「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 を返すなど)。

4

3 に答える 3

2

この記事をチェックしてください。メディア ボタン アクションを使用して同様のものを実装する方法について説明します。

この道を歩んでも成功しなかったとおっしゃっていましたが、それでも試してみてください。ブロードキャスト レシーバーの登録、インテント フィルターの優先順位の設定、およびアクセス許可の追加に関連する落とし穴に注意してください (すべて記事で説明されています)。

これが役立つことを願っています。

于 2013-07-26T18:54:31.910 に答える
1

アクティビティからこれをリッスンしようとしている場合は、キー イベント( およびポスト ICS) を使用onKeyDown()してキャッチします。KEYCODE_MEDIA_PLAY_PAUSEKEYCODE_MEDIA_PLAYKEYCODE_MEDIA_PAUSE

また、ブロードキャスト レシーバー ソリューションが機能するためには、これらのイベントをキャッチする他のアプリがバックグラウンドでインストールおよび実行されていないことを確認してください。

これも見てください: Android - BroadcastReceiver でヘッドセット ボタンのクリックを登録する

于 2013-07-30T17:35:40.317 に答える