android - BLE ScanRecord 的 getServiceData 包含什么?
问题描述
我有一个连接到蓝牙低功耗设备的应用程序。服务 UUID 提供了一个很好的指示,但这还不够:我需要查看设备在特定服务中提供的确切特征。我看到 ScanRecord 中有一个所谓的“服务数据”,它是一系列字节:
https://developer.android.com/reference/android/bluetooth/le/ScanRecord#getServiceData()
但是,我在任何地方都找不到任何详细信息:该服务数据中的信息是什么?在 nRF 连接中,它似乎是一个字节(或几个字节),所以它可能是某种位标志。我希望服务数据可以避免我发现设备,因为这需要连接到它,而我真的想避免这种情况。
举一个更具体的例子:我支持 FTMS 健身机 (0x1826),但只支持室内自行车 (0x2ad2 特性)、跑步机 (0x2acd) 或划船机 (0x2ad1),但不支持交叉训练机、踏步机或爬楼梯机。
解决方案
广告不包含有关设备具有哪些特性的数据。
服务 uuid 有广告类型,但标准规定的特征没有。
通常,如果您知道支持哪些服务,您也应该能够假设这些特征,因为每个服务的规范文档都应该包含该信息。
“服务数据”只包含任意字节。这些字节包含的内容由服务规范定义。
推荐阅读
- arrays - 如何使用 MongoDB 3.0 按索引访问数组元素?
- javascript - 将表格数据输入新组件时,表格数据未与表格标题内联
- javascript - 只有在适合框的情况下才能显示 highcharts xrange 标签?
- java - 我无法用 Selenium WebBrowser Java 打开任何东西
- delphi - TIdhttp HTTPS 握手失败
- angular - 角度 6 中添加到购物车选项的本地存储
- javascript - 为什么访问给定位置旁边的元素行为不端,而访问前一个元素可以正常工作?
- python - ceberus:如何忽略基于 yaml 注释的字段?
- django - Django 2.0 - 通过预取相关属性上的字段对查询集进行排序
- python - 从一个函数返回所有可能的输出,然后在另一个函数中使用它