Android(Xamarin)如何通过蓝牙从手环获取数据(脉冲)

Posted

技术标签:

【中文标题】Android(Xamarin)如何通过蓝牙从手环获取数据(脉冲)【英文标题】:Android(Xamarin) How to get data(pulse) from the bracelet via Bluetooth 【发布时间】:2019-04-01 15:37:09 【问题描述】:

我的目标是使用我的应用程序从健身手环Torntisc T1 获取数据(脉冲)并独立处理手环中的数据。

为了实现,我使用 Xamarin 并找到了一个 Bluetooth LE plugin for Xamarin 插件来连接到设备并从中接收数据。但是,获得的所有特征都称为“未知特征”,其值为 0 字节。虽然它有 5 个服务,每个服务都有 3 个特征。 1 项服务中唯一的特征名称是 other:“Device Name”、“Appearance”、“Peripheral Preferred Connection Parameters”。但是,值(value)到处都是0字节。如何获得特征?如何获得脉搏?

手环有一个应用程序H Band 2.0,它显示了相当多的手环设置,问题来了,这一切在哪里?

原生应用H Band 2.0。尝试反编译here。我在以下目录中找到了负责连接的类:sources\no\nordicsemi\android\dfu。我看到了通过 BluetoothGatt 完成的工作。不幸的是,我不是 java 和 android 方面的专家,不熟悉这个库。我没有找到任何方法或任何与“脉冲”相关的东西,而是大量的魔术解析特征:parse (characteristic)

foreach (var TestService in Services)
            
                var characteristics = await TestService.GetCharacteristicsAsync();
                foreach (var Characteristic in characteristics)
                
                    var properties = Characteristic.Properties;
                    var name = Characteristic.Name;
                    var serv = Characteristic.Service;
                    var value = Characteristic.Value;
                    var stringValue = value.ToString();
                    string result = "";
                    if (value.Length != 0)
                        result = System.Text.Encoding.UTF8.GetString(value, 0, value.Length - 1);
                
            

【问题讨论】:

【参考方案1】:

首先,您可以使用以下app 来更好地了解您正在使用的服务和特性,而无需编写调用代码来获取所需的值。

话虽如此,您将需要文档才能与设备通信,我的意思是您发送的数据、可接受的响应如何映射到有意义的数据等。 BLE 是低能量位,这意味着交换尽可能少的数据。在没有文档的情况下将整数映射到您不知道的枚举值,您可以从反编译的源代码返回,但难度会增加几个数量级。

另一件事是 BLE 是出了名的不可靠(如果您在三星上遇到 gatt 133 错误,您就会明白 :),因此大多数实现还有一种附加的网络层来处理丢弃和优雅降级,以及发送更大的数据和平,这是为每个应用程序/设备定制开发的,你还需要大量的文档来实现它,这不是一件小事。

您选择的库非常好,可以很好地包装您需要的大多数东西,但它不能处理不稳定性,因此您必须自己处理这部分。

干杯:)

【讨论】:

以上是关于Android(Xamarin)如何通过蓝牙从手环获取数据(脉冲)的主要内容,如果未能解决你的问题,请参考以下文章

Android 小米手环蓝牙

在VM中安装Android4.4连接小米手环 之 设置蓝牙

Android 蓝牙可见性开启与关闭

xamarin蓝牙数据接收延迟

原创Android 5.0 BLE低功耗蓝牙从设备应用

灵感手环---蓝牙校准时间