2

我是蓝牙设备开发的新手。我目前的项目需要一个使用蓝牙耳机进行在线聊天的功能。当用户想开始通话时,他应该按一下通话按钮(蓝牙耳机上的一个按钮)。但是当我按下耳机上的按钮时,我创建的 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 设置 intentfilter 来接收连接状态广播。

我读过几篇文章提到常量 ACTION_VENDOR_SPECIFIC_HEADSET_EVENT 在 Jelly Bean 中不起作用。那么你们知道从蓝牙耳机捕获按钮按下事件的其他方法吗?

更新:我从 source.google.com 阅读了手机应用程序的源代码。在 com.android.phone.BluetoothHandsfree 包中,我发现了这个方法:broadcastVendorSpecificEventIntent()。因此系统确实会广播 AT 命令意图。但是在我的应用程序中我仍然无法接收到这种广播,我的猜测是系统接收器已经消耗了由 BLuetoothHandsfree 对象发送的广播。任何人都知道如何设置比系统接收器更高的优先级以检索这种广播?

顺便说一句,我通过设置 Integer.Max_Value 尝试了 IntentFilter 类中的 setPriority() 方法,但是它没有用。

4

1 回答 1

0

我必须为供应商添加类别。

https://stackoverflow.com/a/31732154/2751981

这就是我让 ACTION_VENDOR_SPECIFIC_HEADSET_EVENT 正常工作的方式。

于 2015-07-30T19:20:18.303 回答