Bluetooth デバイスの開発は初めてです。私の現在のプロジェクトでは、オンライン チャットに Bluetooth ヘッドセットを使用する機能が必要です。ユーザーが話し始めたいときは、通話ボタンを 1 回 (Bluetooth ヘッドセットの 1 つのボタン) 押す必要があります。しかし、私が作成した BroadcastReceiver オブジェクトは、ヘッドセットのボタンを押してもブロードキャストを受信できなかったようです。以下は、BroadcastReceiver を初期化する方法です。
IntentFilter filter = new IntentFilter(BluetoothHeadset.ACTION_VENDOR_SPECIFIC_HEADSET_EVENT);
BroadcastReceiver event_Receiver = new BroadcastReceiver(){String cmd=intent.getStringExtra(BluetoothHeadset.EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD);};
registerReceiver(event_Receiver, filter);
ただし、AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED でインテントフィルターを設定することにより、接続状態のブロードキャストを受信することができます。
定数 ACTION_VENDOR_SPECIFIC_HEADSET_EVENT が Jelly Bean では機能しないという投稿をいくつか読みました。それでは、Bluetooth ヘッドセットからボタン押下イベントをキャプチャする他の方法を知っていますか?
更新: source.google.com から電話アプリのソース コードを読みました。パッケージ com.android.phone.BluetoothHandsfree で、このメソッドを見つけました: broadcastVendorSpecificEventIntent()。そのため、システムは AT コマンドの意図をブロードキャストします。しかし、私のアプリケーションではまだこの種のブロードキャストを受信できません。私の推測では、システム レシーバーが BLuetoothHandsfree オブジェクトによって送信されたブロードキャストを消費したのです。この種のブロードキャストを取得するために、システムレシーバーよりも高い優先度を設定する方法を知っている人はいますか?
ちなみに、Integer.Max_Value を設定して IntentFilter クラスの setPriority() メソッドを試してみましたが、うまくいきませんでした。