首页 > 解决方案 > Android:如何获取蓝牙设备的更多信息?

问题描述

除了名称和 MAC 地址之外,是否可以获得有关bondedDevices 的更多信息?例如,您可以确定它到底是什么设备(例如 Gear S3 或三星无线耳塞等)。我似乎无法获得这些信息,但它一定是可能的,对吧?

标签: androidkotlinbluetooth

解决方案


不适用于“经典蓝牙设备”,而不是蓝牙低功耗 (BLE) 设备。

型号、制造商名称等信息被认为是 BLE 设备的标准“GATT 特性”。

通常,您可以在连接到其 GATT 服务器后“发现”设备上的所有类型的信息。连接过程的一部分涉及指定一个回调接口,您可以从该接口发送有关 GATT 服务器信息的请求:

  • 关贸总协定服务
  • GATT 特征(针对每个 GATT 服务)

已绑定的蓝牙设备将不包含您寻找的额外信息,除了名称和 MAC 地址

更重要的是,我发现真正与 BLE 设备绑定是不可靠的(如果不是不可能的话)。

要获得您寻求的信息,您需要“发现”GATT 服务,然后为每个服务列出它们的 GATT 特征。绘制出特征后,您就可以发送读取请求。一切都是异步完成的,这就是为什么您的应用程序必须为初始的“BluetoothDevice.connectGatt”命令提供回调接口的原因。

如果您将来需要保留此信息(当设备未启动时),则由您的应用程序将发现的信息保存在某处(SQLite 数据库等)

我所做的一个观察,令我非常沮丧的是,尽管蓝牙核心规范定义了标准 GATT 特性,但这并不意味着设备制造商将遵循该标准。

例如,许多测量“健康”数据的蓝牙 (BLE) 设备不使用专门为此目的定义的 GATT 特性。他们倾向于定义自己的自定义特征。

话虽如此,型号、制造商名称、软件/硬件/固件版本号几乎都是标准的。


推荐阅读