无法接收来自蓝牙耳机的广播

时间:2013-07-16 08:39:04

标签: android bluetooth headset

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我必须在供应商的类别中添加。

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

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