0

尝试使用 C++/winRT UWP 发现蓝牙低功耗设备并应用合理的过滤器。在 git hub 示例中,代码如下:

    hstring aqsAllBluetoothLEDevices = L"(System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\")";

    auto requestedProperties = single_threaded_vector<hstring>
        ({ L"System.Devices.Aep.DeviceAddress", L"System.Devices.Aep.Bluetooth.Le.IsConnectable",
            L"System.Devices.Aep.IsPresent" });

    deviceWatcher = DeviceInformation::CreateWatcher(aqsAllBluetoothLEDevices,
        requestedProperties,                                                   
        DeviceInformationKind::AssociationEndpoint                             
    );

只要我使用上面的,我发现所有直播的 BTLE 设备;我还发现了一些没有主动做广告的设备,所以使用

System.Devices.Aep.IsPresent

但是,我想只过滤遵循某些 BTLE 健康配置文件的 BTLE 设备。这些配置文件具有以下服务

GATT - Blood pressure   18100000-0000-1000-8000-00805F9B34FB
GATT - Body composition 181B0000-0000-1000-8000-00805F9B34FB
GATT - Glucose  18080000-0000-1000-8000-00805F9B34FB
GATT - Health thermometer   18090000-0000-1000-8000-00805F9B34FB
GATT - Heart rate   180D0000-0000-1000-8000-00805F9B34FB
GATT - Pulse oximeter   18220000-0000-1000-8000-00805F9B34FB
GATT - Weight scale 181D0000-0000-1000-8000-00805F9B34FB

任何人都知道如何配置 deviceWatcher() 以仅报告那些宣传上述服务 UUID 之一的设备?

我曾尝试在 protocolId 中使用它们,但什么也没发现。

4

1 回答 1

0

我从您的用法中看到,DeviceInformation::CreateWatcher您可能拥有最简单的 AQS 字符串:它仅区分 BLE 设备,而这种情况存在的原因是您需要比这更精确的东西。我还看到您有许多要在数组中列出的属性。到目前为止,您可以取回每台 BLE 设备,无论它们是否是您正在寻找的各种配置文件中的任何一个。

您的问题有两个主要组成部分:

  1. 了解列出的各种健康档案的正确 AQS 字符串是什么。如果没有,则无法调用 CreateWatcher 或使用其他方法通过 AQS 列出支持这些配置文件的当前可用设备。为此,您需要调用 GattDeviceService。GetDeviceSelectorFromShortId(如果您使用 16 位 ID 或 GattDeviceService)。GetDeviceSelectorFromUuid使用 GUID 获取字符串。
  2. 在您的代码示例中,不清楚#1 是否是阻止您的唯一问题,或者是否存在不充分了解 AQS 语法以指定所需内容的问题。如果您不知道需要通过 AQS 搜索的内容的名称,AQS 的语法会阻止您。提供提示的快速示例位于页面底部以获取正确的字符串:https : //docs.microsoft.com/en-us/windows/uwp/devices-sensors/aep-service-class-ids在您的情况下,您需要做的是使用 AND 添加所需的 OR 条件,您始终将 BLE 协议 ID 与您希望过滤的任何适用的 System.Devices.AepService.ServiceClassId 值相结合。密切注意 AQS 的语法。AQS 更详细的文档在这里:https://docs.microsoft.com/en-us/windows/desktop/search/-search-3x-advancedquerysyntax
于 2019-04-30T08:07:42.730 回答