使用 WinRT 的 BLE:执行写入特征的“GetCharacteristicsForUuidAsync()”时访问被拒绝

M. *_*ner 5 .net c# windows-runtime bluetooth-lowenergy winrt-component

也许有人可以帮助我,因为我在 Windows 10 上使用 WinRT 的蓝牙 LE 遇到了非常棘手的情况(就像这里假设的:.Net (C#) 中的蓝牙低功耗)。

\n

我需要在 Win32 经典桌面应用程序中使用 BLE。\n我们的代码使用 .NET 运行时(v4.0.30319、.NET Framework 4.6.2)在 32 位框架应用程序中运行。我能够管理所有其他问题(强命名一些 NuGet 程序集 (Shiny.BluetoothLE),在BluetoothAdapter.GetRadioAsync()64 位 Windows 上运行时在 64 位 COM 代理 DLL 中运行),但现在我完全陷入困境,这里\xe2\x80 \x99s 其中:

\n

执行时出现问题,var result = await gattDeviceService.GetCharacteristicsForUuidAsync(uuid, BluetoothCacheMode.Cached);请参阅此处https://learn.microsoft.com/de-de/uwp/api/windows.devices.bluetooth.genericattributeprofile.gattdeviceservice.getcharacteristicsforuuidasync?view=winrt-20348。\n获取读取特征时,是result.Status并且GattCommunicationStatus.Success结果包含所需的特征。\n但是当然我也需要获得写入特征并且我总是得到GattCommunicationStatus.AccessDenied!\n因为结果不包含特征。

\n

有人知道这是为什么吗?我真的需要帮助,因为我现在有点迷路\xe2\x80\xa6

\n

我也尝试AccessPermission通过注册表进行设置,就像这里假设的那样,但根本没有运气\xe2\x80\xa6

\n

PS:我使用 Windows 10 SDK Kit Build 20348,如上所述,它是一个 C# .NET Framework 4.6.2 项目,并且由于使用 GAC,我们的所有程序集都是强命名的。如果我缺少任何内容,请随时与我联系。

\n

M. *_*ner 3

对于任何遇到同样愚蠢问题的人......这是解决方案:

在 Windows 上,在非 UWP 应用程序中使用 .NET Framework 4.6.1+ 和 WinRT 库,您只能调用一次来获取特征,无论您是通过一次调用所有特征gattDeviceService.GetCharacteristicsAsync(BluetoothCacheMode.Uncached)还是通过 .NET 调用特定特征gattDeviceService.GetCharacteristicsForUuidAsync(uuid, BluetoothCacheMode.Cached)

任何后续调用都将失败GattCommunicationStatus.AccessDenied......所以我现在的解决方案是立即检索所有特征并在本地过滤它们。

这就成功了!不管怎样,这太愚蠢了……现在浪费了我很多时间!看来,我也不需要AccessPermission通过注册表进行任何设置。

PS:如果我遇到另一个棘手的情况,我会打电话给你,只是为了让你们知道。