Android如何检测/确定蓝牙设备类型?

时间:2018-01-18 16:30:28

标签: android bluetooth bluetooth-lowenergy bluetooth-gatt

首先问题......

1)Android(pre API23)如何检测蓝牙设备的设备类型?显然在我试图连接的双模蓝牙耳机中设置BLE ADV标志 BREDR_NOT_SUPPORTED 可以解决问题,但代价是干扰更现代的API中的经典链路设置/配对。所以这不是一个真正的选择...

2)如果我的蓝牙耳机中没有什么可以做到FW-wise(这将是最好的),你能否提出任何想法我可能会覆盖BluetoothAdapter的设备检测逻辑,以便我总是返回设备类型的 DUAL 即可。我的意思是,我不需要在应用程序中进行适当的检测,因为我已经在LE扫描期间使用GATT服务UUID过滤来首先找到设备,所以我已经知道它是“兼容设备”,只要我能让Android API在API23手机上运行得相应...

......然后可能是一些背景/背景;)

我正在为iOS和Android制作与蓝牙耳机交互的应用程序,我也写了FW for。因此,我对耳机和应用程序的行为都有源代码控制。

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

一切都像iOS上的魅力一样。

但是...

在Android上,自从推出API23和Marshmallow以来,我看到了逐渐变化的BLE ADV数据,特别是ADV标志已经开始被Android用来控制经典的蓝牙链接建立/配对。

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

但是,由于 API23 ,这不是必需的,因为耳机是支持BREDR的双模设备,所以它也没有任何意义吗?

相反,建议使用 LE_BR_EDR_CONTROLLER LE_BR_EDR_HOST BLE ADV标志让Android知道这确实是一款功能齐全的双模设备... < / p>

它有效。正好。只要您不再尝试在Android API21手机上运行您的配套应用程序,现在突然无法检测到我的耳机是双模设备。尽管我的反射方法强制正确连接正确的传输,但在我的Samsung S5“主动”测试手机上运行API21的Android根本不会与我的耳机建立GATT连接,我强烈认为它与设备类型是相关的事实相关检测为DEVICE_TYPE_CLASSIC

0 个答案:

没有答案