我对 Google Fit 了解不多,因此使用该应用程序与手表进行交互可能更容易。但是,我将在类似的场景中解释我过去是如何处理蓝牙通信的
设备使用该协议Bluetooth Low Energy
进行数据传输。首先,您应该阅读协议如何工作的一般描述。一个好的开始是蓝牙 SIG 网站。
您需要知道的最重要的事情是协议中呈现的软件模型是什么:每个设备都公开一个Generic Attribute Profile (GATT)
. 在我看来,GATT 只是一个 API:它说明了设备“提供”了什么数据以及如何从客户端使用它。您应该熟悉以下术语:
- 特点:它是客户端和服务器之间传输的数据值。例如,设备的当前电池电压。
- 服务:相关特征的集合,它们一起运行以执行特定功能。例如,健康温度计服务包括温度测量值和测量之间的时间间隔的特征。
- 描述符:描述符提供有关特性的附加信息。例如,温度值特性可以指示其单位(例如摄氏度),以及传感器可以测量的最大值和最小值。描述符是可选的,每个特征可以有任意数量的描述符。
蓝牙 SIG 指定了通用服务和特性的完整列表,以及如何与它们交互。同样,所有这些信息都在他们的网站上。
因此,在开始编写与手表交互的代码之前,您需要做的是找出设备公开了哪些服务和特性。理想的情况是您购买手表时随附的手册说明了有关它的内容……但不幸的是,情况可能并非如此。
因此,您必须自己弄清楚。您可以做的第一件事是下载一个应用程序,让您连接到 BLE 设备并探索其 GATT 配置文件。我推荐LightBlue Explorer。使用它,您可以连接到手表并找出设备公开的特征和服务。然后,你去阅读蓝牙 SIG 网站上的规范,你就拥有了开始编写代码所需的一切。
但是,BLE 设备的制造商并不局限于蓝牙 SIG 定义的服务和特性。他们可以创建和实施自己的。在下图中,我连接到数字秤。如您所见,它有许多“标准”服务(用户索引、身体成分、电池服务等),但被红色方块包围,您可以看到具有五个没有名称的特征的服务。
![在此处输入图像描述](https://i.stack.imgur.com/mBXQW.png)
由于该服务不是由蓝牙 SIG 定义的,因此您需要进行一些逆向工程(这可能非常困难和令人沮丧)来弄清楚这些特征的含义以及如何使用它们。
我所做的是下载设备的官方应用程序,启用蓝牙 Snoop HCI并开始以尽可能多的不同方式与设备交互。之后,我用Wireshark打开了蓝牙日志,分析了蓝牙数据包的传输,试图推断出如何使用这些设备的特定特性。
最后,一旦您了解了蓝牙 GATT 服务器在设备中的工作原理,您就可以编写自己的应用程序与它进行交互了。我强烈建议你使用一个库来实现通信,否则你会很吃力。我见过和使用过的最好的一个是RxAndroidBle(他们有针对不同平台的其他版本的库)。
这是一个漫长的过程,我在这里写的只是一些一般信息,所以你有一个起点。