仅通过“服务数据”数据类型宣传蓝牙 GATT 服务是否是个好主意?

问题描述

我们正在设计一个低功耗蓝牙外设,它实现了一些主要的 GATT 服务,并且需要通告该服务的存在以及与该服务相关的几个字节的数据。该设备旨在连接到任意消费者智能手机(因此主要是 Android 和 iOS)。我们使用 16 位服务 UUID 并计划通过 advertising data type 0x16 (Service Data - 16 bit UUID) 通告相关数据。由于广告 PDU 的大小有限,我们希望避免任何额外的广告数据,最值得注意的是,我们希望避免通过数据类型 0x03(16 位 UUID 的完整列表)来广告相同的 UUID。>

由于该设备应与消费类智能手机一起使用,兼容性是一个主要问题,因此是否符合相关标准也是一个问题。一个关键方面似乎是智能手机操作系统应该能够对宣传我们服务的设备进行有效过滤,因此应用可以在后台运行和收听。

一种安全的方法是同时发布“服务数据”和“完整的 UUID 列表”,因为所有操作系统当然都能够过滤后者中发布的 UUID,但这会超出广告的规模数据单元。我们还可以配置移动设备的 BLE 扫描器以返回所有 附近的 BLE 设备,无需任何过滤,并在我们自己的代码中进行过滤,但这样效率不高,并且不允许在背景。

我们对不同的智能手机(Android 和 iPhone,旧的和新的)进行了一些测试,乍一看,当仅广告服务数据类型时过滤服务 UUID,似乎工作得很好。但是,我们找不到任何文档(无论是针对 Android 还是针对 iOS)明确指出这是受支持的场景,因此我们无法确定它适用于所有手机以及未来。

Apple Accessory Design Guidelines 部分 36.4 参考了蓝牙核心规范补充,A 部分,并说明了以下内容

配件发送的广告数据应至少包含蓝牙核心规范补充,A 部分中所述的以下信息:

  • 标志
  • TX 功率电平
  • 本地名称
  • 服务

[...]

主要服务应始终在广告 PDU 中进行广告。

然而,这并没有说明应该使用哪种广告数据类型,Android 文档也是如此。

在这种情况下,我的问题是:

  • 仅通过“服务数据”数据类型宣传主要 GATT 服务是否是个好主意?
  • 这是否符合蓝牙核心规范?
  • 是否有任何适用于 Android 和 iOS 的文档明确说明,从操作系统的角度来看这是否是受支持的场景(我实际上不是指操作系统源代码)?
  • 是否有任何 Android (>= 5.0) 或 iOS (>= 11) 设备无法过滤通过“服务数据”数据类型宣传的服务 UUID?
  • 鉴于广告 PDU 的大小有限,这种情况下的最佳做法是什么?

感谢您的意见!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...