5

我打算创建一个健身安卓应用程序。除其他外,我希望与可穿戴设备进行一些集成。我现在手头的设备是荣耀手环 4(华为)。我还没有找到任何关于如何解决这个问题以及它是否可能的明确解释。

我的第一个想法是定期从 HuaweiHealth 应用程序中获取数据并将其导入我的内部。但是HuaweiHealth应用程序似乎与其他应用程序不太好相处,因为我还没有看到访问这些数据的方法。

我遇到的另一件事是 Android Sensors API: https ://developers.google.com/fit/android/ble-sensors 我可以用它从我的 Honor Band 获取数据吗?我认为这只会让我得到原始数据,我必须处理所有逻辑才能获得准确的计步器、心率计等。

任何输入将不胜感激。

4

2 回答 2

7

我对 Google Fit 了解不多,因此使用该应用程序与手表进行交互可能更容易。但是,我将在类似的场景中解释我过去是如何处理蓝牙通信的

设备使用该协议Bluetooth Low Energy进行数据传输。首先,您应该阅读协议如何工作的一般描述。一个好的开始是蓝牙 SIG 网站

您需要知道的最重要的事情是协议中呈现的软件模型是什么:每个设备都公开一个Generic Attribute Profile (GATT). 在我看来,GATT 只是一个 API:它说明了设备“提供”了什么数据以及如何从客户端使用它。您应该熟悉以下术语:

  1. 特点:它是客户端和服务器之间传输的数据值。例如,设备的当前电池电压。
  2. 服务:相关特征的集合,它们一起运行以执行特定功能。例如,健康温度计服务包括温度测量值和测量之间的时间间隔的特征。
  3. 描述符:描述符提供有关特性的附加信息。例如,温度值特性可以指示其单位(例如摄氏度),以及传感器可以测量的最大值和最小值。描述符是可选的,每个特征可以有任意数量的描述符。

蓝牙 SIG 指定了通用服务和特性的完整列表,以及如何与它们交互。同样,所有这些信息都在他们的网站上。

因此,在开始编写与手表交互的代码之前,您需要做的是找出设备公开了哪些服务和特性。理想的情况是您购买手表时随附的手册说明了有关它的内容……但不幸的是,情况可能并非如此。

因此,您必须自己弄清楚。您可以做的第一件事是下载一个应用程序,让您连接到 BLE 设备并探索其 GATT 配置文件。我推荐LightBlue Explorer。使用它,您可以连接到手表并找出设备公开的特征和服务。然后,你去阅读蓝牙 SIG 网站上的规范,你就拥有了开始编写代码所需的一切。

但是,BLE 设备的制造商并不局限于蓝牙 SIG 定义的服务和特性。他们可以创建和实施自己的。在下图中,我连接到数字秤。如您所见,它有许多“标准”服务(用户索引、身体成分、电池服务等),但被红色方块包围,您可以看到具有五个没有名称的特征的服务。

在此处输入图像描述

由于该服务不是由蓝牙 SIG 定义的,因此您需要进行一些逆向工程(这可能非常困难和令人沮丧)来弄清楚这些特征的含义以及如何使用它们。

我所做的是下载设备的官方应用程序,启用蓝牙 Snoop HCI并开始以尽可能多的不同方式与设备交互。之后,我用Wireshark打开了蓝牙日志,分析了蓝牙数据包的传输,试图推断出如何使用这些设备的特定特性。

最后,一旦您了解了蓝牙 GATT 服务器在设备中的工作原理,您就可以编写自己的应用程序与它进行交互了。我强烈建议你使用一个库来实现通信,否则你会很吃力。我见过和使用过的最好的一个是RxAndroidBle(他们有针对不同平台的其他版本的库)。

这是一个漫长的过程,我在这里写的只是一些一般信息,所以你有一个起点。

于 2019-05-23T16:13:30.767 回答
0

实际上正在查看相同的响应...感谢@dglozano 到目前为止的解释。我的华为手环 3 pro 也给我带来了一些痛苦……但是,看了很多之后,我发现了两个有趣的地方:

  1. 您可以在杀死华为健康应用程序后通过 LightBlue Explorer 连接您的设备。

  2. 在我的 Android 上安装 PCAP Remote 并运行后,我可以在我的 Linux 最佳发行版上使用 Wireshark 来嗅探包

    $ssh user@192.168.1.13 -p 15432 'pcapremote' > huawei.pcap

    在那之后,我运行wireshark,打开文件,刷新,然后因为我感到迷茫而把头撞在墙上。

祝你好运 !

于 2020-08-21T20:53:32.167 回答