如何从同一个ble设备访问两个不同的服务

时间:2016-11-01 08:56:50

标签: c# bluetooth-lowenergy windows-8.1

例如,我有两台心率监测器与我的平板电脑配对。 我正在使用此类代码获取HRM设备列表:

var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync
(
    GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.HeartRate)
);

然后我在GUI中显示一个列表框,设备名称来自devices [i] .Name。 例如,我选择索引为0的设备。然后我可以访问它HR HRvice和HRM特性:

var service = await GattDeviceService.FromIdAsync(devices[0].Id);
var characteristic = await service.GetCharacteristics(attCharacteristicUuids.HeartRateMeasurement);

除了心率,我需要电池状态。如何才能访问相同(已选择)设备的电池服务?

1 个答案:

答案 0 :(得分:0)

我们开始之前的一些信息:

您可以蓝牙设备与计算机配对,然后再进行扫描!

Listing your paired devices

ListBox1.Items.Clear();

var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

foreach (var device in devices)
{
    ListBox1.Items.Add(device);
}

如果您想了解蓝牙设备的电池寿命:

How to get the battery level after connect to the BLE device?

要一次访问多个服务,您需要"重新连接" 到设备:

  

Device A一次只能连接一台设备B的S服务。设备A可以同时连接Device B,C,D,E等服务S.

@alanjmcf

来源:Establishing multiple bluetooth SPPs at the same time

但是不要对方法GetAllIncludedServices();感到困惑,因为它确实返回" 包含的服务"。正如an other question所述的一个答案:

  

您可能不想获得"包含的服务"。包含的服务是BLE中的一个特殊概念,我怀疑您使用的是用于将一个服务链接到另一个服务。

@Emil