Android如何检测/确定蓝牙设备类型? 先问问题。。。

Android如何检测/确定蓝牙设备类型? 先问问题。。。,android,bluetooth,bluetooth-lowenergy,bluetooth-gatt,Android,Bluetooth,Bluetooth Lowenergy,Bluetooth Gatt,1) Android(API23之前版本)如何检测蓝牙设备的设备类型?显然,在我尝试连接的双模蓝牙耳机中设置BLE ADV flagBREDR_不受支持,可以实现这一目的,但代价是干扰更现代API中的经典链接设置/配对。所以这不是一个真正的选择 2) 如果我的蓝牙耳机在FW-wise(这真的是最好的)方面做不到任何事情,您能建议我如何覆盖蓝牙适配器的设备检测逻辑,以便我始终返回设备类型DUAL。我的意思是,我不需要在应用程序中进行适当的检测,因为我已经在LE扫描过程中使用了GATT服务UUID过

1) Android(API23之前版本)如何检测蓝牙设备的设备类型?显然,在我尝试连接的双模蓝牙耳机中设置BLE ADV flagBREDR_不受支持,可以实现这一目的,但代价是干扰更现代API中的经典链接设置/配对。所以这不是一个真正的选择

2) 如果我的蓝牙耳机在FW-wise(这真的是最好的)方面做不到任何事情,您能建议我如何覆盖蓝牙适配器的设备检测逻辑,以便我始终返回设备类型DUAL。我的意思是,我不需要在应用程序中进行适当的检测,因为我已经在LE扫描过程中使用了GATT服务UUID过滤来查找设备,所以我已经知道它是一个“兼容设备”,只要我能让API23之前的手机上的安卓系统做出相应的行为

... 然后可能是一些背景/背景;) 我正在为iOS和安卓系统制作应用程序,这些应用程序可以与蓝牙耳机进行交互,我还为蓝牙耳机编写了FW。因此,我对耳机和应用程序的行为都有源代码控制

该耳机基于高通公司的CSR8670芯片组,是一款双模蓝牙“智能就绪”spec 4.2小工具,采用典型的经典配置文件(A2DP/AVRCP/HFP)加上我自己的定制GATT服务,作为一个可编程外围设备,运行隧道专用串行协议,在手机端连接我的应用程序

在iOS上,一切都像一个魔咒

但是

在Android上,自从API23和棉花糖作为BLE ADV数据发布以来,我看到了一个逐渐的变化,特别是ADV标志已经开始被Android用来控制经典的蓝牙链接建立/配对

例如,几年前,当API21是最新的事情时,我必须明确设置BREDR_NOT_SUPPORTED标志,并使用反射强制传输,以最终成功执行我的
connectGatt(…)
请求

但是,由于API23不需要,也没有任何意义,因为耳机是支持BREDR的双模设备

相反,我们建议使用LE_BR_EDR_控制器LE_BR_EDR_主机BLE ADV标志让Android知道这确实是一款功能完全的双模设备


它是有效的。很好。只要你不再尝试在Android API21手机上运行你的伴侣应用程序,现在它突然无法检测到我的耳机是双模式设备。尽管我采用了反射方法来强制正确连接和正确传输,但在我的三星S5“主动”测试手机上运行API21的Android无法与我的耳机建立GATT连接,我强烈认为这与设备类型被检测为
device\u-type\u-CLASSIC

这一事实有关。您能为API 21和23提供不同的连接服务吗?是的,我已经这样做了。所以-我的问题与API21和API23之类的东西无关。问题在于,无论出于何种原因,API21都会将我的耳机检测为经典型,而不是双模型。这反过来又导致关贸总协定的失败。他的问题是;如何/如果我可以改变并影响此检测机制(因为我认为它与我的connectGatt请求的结果相关,而该请求在API21上确实失败)。是的。我在API21和API23上执行的connectGatt请求是不同的,因为我在API21上使用反射来强制执行ABLE as传输。这非常有趣,因为设备类型信息作为每个包的一个元素从设备发送。可能问题在于,您连接到耳机的设备不支持API上的GATT as
connectGatt
“每个数据包中发送”是什么意思?我生成为LE外设的BLE ADV数据中没有设备类型的数据,只有ADV标志和其他一些东西。。。在API23安卓手机上,耳机被检测为双模设备。。。至于关贸总协定在API23之前没有得到支持,我不能同意。BLE支持作为中心,允许扫描和连接到外围设备在API18中正式引入,19年通过绑定扩展,21年在扫描方面重新设计。我真的认为没有人在旧的Android版本中正确处理代码。例如,我多次看到Android设备尝试连接到LE设备(使用connectGatt而不进行反射),通过查看HCI日志,它认为这是一个经典设备,尽管它一直在宣传它不支持BR/EDR。如果你真的想知道并调试正在发生的事情,你可以尝试阅读Android源代码。我不确定Stack Overflow的任何人都确切地知道它是如何工作的。还要尝试更多的实验,看看一些配置是否有效。