Можно ли подключиться к устройству BTLE в приложении WPF?

Поэтому я пытаюсь подключиться к монитору сердечного ритма Polar H7, и для этого мне нужно использовать приложение WPF. Я использую Windows 10.

Теперь я уже сделал это с приложением UWP, и оно отлично работает, но я бы хотел использовать WPF (если это возможно) вместо того, чтобы делать то же самое.

Я нашел этот пост о том, как использовать API-интерфейсы Windows 10 в WPF/winforms/etc, и подумал, что это то, что мне нужно. Я успешно добавил Bluetooth API в свой проект WPF и добавил код, который работал для моего проекта UWP, но он не работает.

Вот фрагмент моего кода, где он перестает работать:

        DeviceInformation _devicePolar = null;
        string StatusInformation;
        string StatusInformation2;
        var devices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.HeartRate));
        foreach(var d in devices)
        {
            Debug.WriteLine(d.Name + " " + d.Id);
        }
        if (null == devices || devices.Count <= 0) return;
        foreach (var device in devices.Where(device => device.Name == "Polar H7 DCB16C16"))
        {
            _devicePolar = device;
            StatusInformation = string.Format("Found {0}", _devicePolar.Name);
            break;
        }
        if (_devicePolar == null) return;
        var service = await GattDeviceService.FromIdAsync(_devicePolar.Id);
        if (service == null) return;

Теперь этот звонок

await GattDeviceService.FromIdAsync(_devicePolar.Id) 

возвращается ноль. У меня действительно была та же самая проблема, когда я сделал приложение UWP, и я узнал, что это было, потому что я забыл добавить это

  <Capabilities>
    <Capability Name="internetClient" />
    <DeviceCapability Name="bluetooth" />
  </Capabilities>

В мой файл манифеста. Как только я вставил это (в моем приложении UWP), оно работало нормально. Но, похоже, в WPF-приложении нет аналогичного места для этой части. Теперь, возвращаясь к сообщению в блоге о том, как добавить библиотеки Win 10 в WPF, этот фрагмент, кажется, говорит мне, что так было всегда:

Второй набор API, которые вы не можете использовать, это те, которые зависят от идентичности пакета приложения. Приложения UWP имеют идентификаторы пакетов, а программное обеспечение для ПК - нет. Информацию об идентичности пакета можно найти в файле манифеста приложения.

И, продолжая изучать тему Microsoft, приведенную в сообщении, в нем говорится о Bluetooth, что "в настоящее время не все API поддерживаются для упакованных приложений". Что ужасно неспецифично.

Также следует упомянуть, что прежде чем пытаться это сделать, я попытался использовать библиотеку 32feet, но мое устройство вообще не отображалось, в то время как другие устройства (не LE) были, поэтому я предполагаю, что 32feet просто не поддерживает BTLE. Я обнаружил, что это спрашивает то же самое о 32 футах, и именно это заставило меня попробовать то, что я подробно описал выше, но я все еще не уверен на 100%, могу ли я просто использовать 32 фута для подключения к устройствам BTLE.

Таким образом, мой вопрос, прав ли я, что то, что я пытаюсь сделать (приложение WPF, использующее Windows 10 API для подключения к устройству Bluetooth), в настоящее время не может быть выполнено? Если нет, что я делаю не так?

0 ответов

Обновление через два года опубликовал вопрос: я думаю, что до сих пор нет библиотеки, поддерживающей WPF Bluetooth LE. Довольно очевидным доказательством является то, что настройки Windows, которые находятся в UWP, поддерживают устройства Bluetooth LE, а панель управления в Windows 10 - нет.

Единственное решение, которое я могу предложить сейчас, - это купить ключ Bluetooth, который имеет функцию виртуального COM-порта, поэтому в идеале я могу общаться с устройством BLE, например, используя последовательное соединение. Еще не проверял, позже обновлю, если это работает.

Другие вопросы по тегам