微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BLE ScanRecord 的 getServiceData 包含什么?

如何解决BLE ScanRecord 的 getServiceData 包含什么?

我有一个连接到低功耗蓝牙设备的应用程序。服务 UUID 提供了一个很好的指示,但这还不够:我需要查看设备在特定服务中提供的确切特征。我看到 ScanRecord 中有一个所谓的“服务数据”,它是一系列字节:

https://developer.android.com/reference/android/bluetooth/le/ScanRecord#getServiceData()

但是,我无法在任何地方找到任何详细信息:该服务数据中的信息是什么?在 nRF 连接中,它似乎是一个字节(或几个字节),所以它可能是某种位标志。我希望服务数据可以让我免于发现设备,因为这需要连接到它,我想真正避免这种情况。

一个更具体的例子:我支持 FTMS fitness Machines (0x1826),但仅支持室内自行车(0x2ad2 特性)、跑步机(0x2acd)或划船机(0x2ad1),但不支持交叉训练机、踏步机或爬楼梯机.

解决方法

该广告不包含有关设备具有哪些特征的数据。

服务 uuid 有广告类型,但没有标准指定的特征。

通常,如果您知道支持哪些服务,您也应该能够假设这些特征,因为每个服务的规范文档都应该包含该信息。

“服务数据”只包含任意字节。这些字节包含的内容由服务规范定义。

,

@Emil 的回答适用于一般情况。至于我的具体示例,我需要添加一个答案,因为它确实提供了有关特征的信息(幸运的是)。 FTMS 服务可以代表各种各样的运动设备:室内自行车、跑步机、划船机、交叉训练机、踏步机、楼梯机。这些都在服务中实现了不同的特性,以提供设备特定的数据。就我而言,即使在扫描阶段,我也可能想知道设备是哪种类型,而无需与设备配对。

所以基本上这是一个 RTFM (Read The Fine Manual) 的情况,在研究了 FTMS 标准文档后,我可以很高兴地说 FTMS (0x1826) 情况下的广告数据有一个所谓的“健身机器类型”字段,这是一个 2 字节长的位标志。在 78 页长的规范 PDF 中,这是第 15-16 页。该标志的位:

  • 位 0:支持跑步机
  • 第 1 位:支持交叉训练师
  • 位 2:支持爬梯
  • 第 3 位:支持爬楼梯
  • 位 4:支持划船器
  • 第 5 位:支持室内自行车
  • 第 6-15 位:未来使用

标准委员会肯定已经意识到了这个用例,为他们点赞。我很快就会在我的软件中利用这一点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。