android - Android:如何获取蓝牙设备的更多信息?
问题描述
除了名称和 MAC 地址之外,是否可以获得有关bondedDevices 的更多信息?例如,您可以确定它到底是什么设备(例如 Gear S3 或三星无线耳塞等)。我似乎无法获得这些信息,但它一定是可能的,对吧?
解决方案
不适用于“经典蓝牙设备”,而不是蓝牙低功耗 (BLE) 设备。
型号、制造商名称等信息被认为是 BLE 设备的标准“GATT 特性”。
通常,您可以在连接到其 GATT 服务器后“发现”设备上的所有类型的信息。连接过程的一部分涉及指定一个回调接口,您可以从该接口发送有关 GATT 服务器信息的请求:
- 关贸总协定服务
- GATT 特征(针对每个 GATT 服务)
已绑定的蓝牙设备将不包含您寻找的额外信息,除了名称和 MAC 地址。
更重要的是,我发现真正与 BLE 设备绑定是不可靠的(如果不是不可能的话)。
要获得您寻求的信息,您需要“发现”GATT 服务,然后为每个服务列出它们的 GATT 特征。绘制出特征后,您就可以发送读取请求。一切都是异步完成的,这就是为什么您的应用程序必须为初始的“BluetoothDevice.connectGatt”命令提供回调接口的原因。
如果您将来需要保留此信息(当设备未启动时),则由您的应用程序将发现的信息保存在某处(SQLite 数据库等)
我所做的一个观察,令我非常沮丧的是,尽管蓝牙核心规范定义了标准 GATT 特性,但这并不意味着设备制造商将遵循该标准。
例如,许多测量“健康”数据的蓝牙 (BLE) 设备不使用专门为此目的定义的 GATT 特性。他们倾向于定义自己的自定义特征。
话虽如此,型号、制造商名称、软件/硬件/固件版本号几乎都是标准的。
推荐阅读
- javascript - 如何防止在 webpack 编译中合并 scss 文件?
- c# - .NET Framework 4.7.2 不支持 EFCore dll 中的 System.Data.SqlClient
- c# - 使用 Puppeteer 生成 PDF 并在 .Net 中显示/保存
- python - Python JIRA 非强制性字段在创建问题时被强制
- java - 系统找不到指定的文件但文件存在
- powershell - 修改 Invoke-Command 的输出
- c# - 选择和加入方法
- liquibase - 生成变更日志时更小的变更集
- android - 片段和文件查看器
- rest - Invoke-RestMethod 以哈希表的值传递参数