连接BLE设备后,我怎么知道都有哪些服务可用,我只知道打印uuid但我想知道服务的名称

Posted

技术标签:

【中文标题】连接BLE设备后,我怎么知道都有哪些服务可用,我只知道打印uuid但我想知道服务的名称【英文标题】:After connecting to BLE device,how can i know which services are available, i only know to print uuids but i want to know the name of service连接BLE设备后,我怎么知道有哪些服务可用,我只知道打印uuid但我想知道服务的名称 【发布时间】:2021-10-03 21:45:01 【问题描述】:

我是使用 Kotlin 进行 android 开发的新手,我正在开发一个应用程序来搜索 BLE 设备。 我能够打印服务(uuids)及其特征(uuids)。我没有任何特定的信标可以连接。我只是用我的应用程序搜索并获取我周围的 ble 设备列表。 我随机连接到其中一个并将其服务打印到控制台。我的问题是,我如何知道我正在连接的设备是什么广告以及我可以从中读取什么。 我没有从这些 uuid 中得到任何想法。 如果您需要更多相关信息,请告诉我。

printGattTable: Service 00001801-0000-1000-8000-00805f9b34fb
    Characteristics:
    |--00002a05-0000-1000-8000-00805f9b34fb
    Service d0611e78-bbb4-4591-a5f8-487910ae4366
    Characteristics:
    |--8667556c-9a37-4c91-84ed-54ee27d90049
    Service 9fa480e0-4967-4542-9390-d343dc5d04ae
    Characteristics:
    |--af0badb1-5b99-43cd-917a-a77bc549e3cc
    Service 0000180f-0000-1000-8000-00805f9b34fb
    Characteristics:
    |--00002a19-0000-1000-8000-00805f9b34fb
    Service 00001805-0000-1000-8000-00805f9b34fb
    Characteristics:
    |--00002a2b-0000-1000-8000-00805f9b34fb
    |--00002a0f-0000-1000-8000-00805f9b34f

【问题讨论】:

BluetoothAdapter.getDefaultAdapter().getName() 这样的事情? 是的,但我想知道可用于 ble 设备的服务名称。 【参考方案1】:

没有预定义的方法可以将 UUID 转换为其各自的服务名称。你必须自己写。您可以找到已分配的 16 位 UUID 列表,其中包含蓝牙 SIG 成员 UUID 和 GATT 服务 UUID here。 Github 上也有一些项目提供了一个易于解析的 UUID 列表,例如 bluetooth-numbers-database。

请记住,即使设备使用标准 GATT 服务,设备也可以将其服务“隐藏”在非标准 UUID 后面。在这种情况下,除非您在该设备文档中找到说明,否则您将无法知道该服务在做什么。

【讨论】:

【参考方案2】:

在协议级别没有服务名称之类的东西。只有UUID。因此,您想做的事情是不可能的。您可以尝试在线搜索从 UUID 到常见服务的服务名称的映射,并将其嵌入到您的应用中。

【讨论】:

以上是关于连接BLE设备后,我怎么知道都有哪些服务可用,我只知道打印uuid但我想知道服务的名称的主要内容,如果未能解决你的问题,请参考以下文章

通过 BLE 设备发送命令

谁制造了低距离或低发射功率可用或可配置的 BLE 设备

获得蓝牙低功耗 (BLE) 设备通知的步骤是啥?

BlueZ DBUS API - GATT 接口对 BLE 设备不可用

我想知道 BLE gatt 的设置完成时间,比如回调

阻止 BLE 设备连接到 GATT 服务器