【问题标题】:Android BLE // Using custom service UUIDAndroid BLE // 使用自定义服务 UUID
【发布时间】:2014-01-29 10:37:25
【问题描述】:

我们正在开发一个定制的低功耗蓝牙外设,我们需要定义我们的定制服务。 基于此链接:https://www.bluetooth.org/en-us/specification/assigned-numbers/service-discovery

所有短 UUID(16 位)都保留等待 BT 服务规范的未来修订。 并且当前版本的 Android (4.4) 似乎不支持 128 位 UUID。

所以基本上我不能使用 16 位 UUID 来定义我的服务,但我不能使用 Android 过滤我的服务以获得 128 位 UUID。 有人对实现它的最佳方法有想法吗? 谢谢

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy android-bluetooth


    【解决方案1】:

    我仍然不确定是否可以使用自定义 16 位 UUIDS,所以我们设法根据这个 SO question 做一些其他事情。 startLeScan with 128 bit UUIDs doesn't work on native Android BLE implementation

    我们扫描所有设备并在 LeScanCallback 返回的 byte[] scanRecord 中搜索我们的服务。

    【讨论】:

    • 这将永远是安全和未来的证明。 Android 似乎在他们的新扫描 API(21 级)中支持更长的 UUID。 Apple 推荐使用 [tool](developer.android.com/reference/android/bluetooth/le/…, android.os.ParcelUuid)) 来生成随机 UUID 以供使用。所以看来这是正确的方法。
    【解决方案2】:

    显然并非所有 16 位 UUID 都被保留。提到的 UUID 和 0x000E – 0x01FF 范围内的 UUID 是保留的。我已将 UUID FFF0 - FFFA 用于我的自定义配置文件,它仍然可以正常工作。

    看看 TI 简单外设示例中的 simpleGATTProfile。

    【讨论】:

    • 据我了解,范围 0x00E - OxO1FF 仅保留用于属性。 (来自文档:以下属性 ID 对于所有服务具有相同的含义。这些属性 ID 应在 0x0000 到 0x01FF 范围内。)。所以我不确定以上所有内容都可以使用...在 TI 示例中,他们使用 id 0xFFF0 进行服务,但从蓝牙的角度来看,这可以吗?与其他服务的冲突风险很高吗?
    • 不推荐从 0xffff 分配自定义“内部”UUID 范围。标准开发组织 (SDO) describes 公司如何申请 16 位 UUID,目前唯一获得批准的是 A4WP。它有 0xFFFE,所以他们似乎很可能从那里开始,只是递减计数器。
    【解决方案3】:

    16 位 UUID 是更长 UUID 的快捷方式。 例如,血压UUID(0x1810)与

    UUID.fromString("00001810-0000-1000-8000-00805F9B34FB")
    

    有了它,你可以这样做:

    val ids = arrayOf(UUID.fromString("00001810-0000-1000-8000-00805F9B34FB"))
    startLeScan(ids, myCallback)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多