【问题标题】:Can't receive broadcast from bluetooth headset无法从蓝牙耳机接收广播
【发布时间】:2013-07-14 08:29:22
【问题描述】:

我是蓝牙设备开发的新手。我目前的项目需要一个使用蓝牙耳机进行在线聊天的功能。当用户想要开始通话时,他应该按一下通话按钮(蓝牙耳机上的一个按钮)。 但是当我按下耳机上的按钮时,我创建的 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() 方法,但是它不起作用。

【问题讨论】:

    标签: android bluetooth headset


    【解决方案1】:

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

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

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

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 嗯,重要的部分是为供应商添加类别,但至于代码。 filter.addCategory(BluetoothHeadset.VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY+"."+BluetoothAssignedNumbers.PLANTRONICS);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多