如何在桌面.NET应用程序中获得BLE广告回调
本文关键字:BLE 回调 桌面 NET 应用程序 | 更新日期: 2023-09-27 18:01:09
我正试图从.NET Windows桌面应用程序获取BLE广告回调。我可以调用API,但是从未从WPF或命令行应用程序中的操作系统调用Received事件。当代码从VS2015中的单元测试或通用Windows应用程序调用时,我确实会收到事件。然而,我需要做通用Windows中没有的其他事情。这是代码:
using Windows.Devices.Bluetooth.Advertisement;
public static void ScanForAdvertisments()
{
mWatcher = new BluetoothLEAdvertisementWatcher();
mWatcher.Received += OnAdvertismentReceived;
mWatcher.ScanningMode = BluetoothLEScanningMode.Active;
mWatcher.Start();
}
public static void OnAdvertismentReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
ulong address = args.BluetoothAddress;
short rssi = args.RawSignalStrengthInDBm;
}
- 我引用Windows.winmd是为了包含BLE/UWP命名空间
- 我在Windows 10周年纪念版上使用的是4.6.1版本的框架,我在以前的Windows构建中也遇到了同样的问题
- 使用UWP应用程序,我在appxmanifest中设置了蓝牙的DeviceCapability。单元测试项目似乎不需要这个,我不知道如何将appxmanifests应用于桌面项目
- status属性报告扫描仪正在运行,并且停止的事件也从未触发
不管怎样,这是Windows的错误吗?有没有办法解决这个问题?我试着研究应用程序服务,但它们似乎并没有很好地调用桌面代码,从UWP调用桌面代码似乎很难部署。谢谢
刚刚在Console.NET 4.6.1应用程序中尝试了这一点,广告回调即将通过。我不久前写了一个GitHub示例,这可能会有所帮助。让WinRT API工作的关键是两个参考:
要使用WinRT API,请添加两个引用:
C: ''Program Files(x86(''Windows Kits''10''UnionMetadata''Windows.winmd
C: ''Program Files(x86(''引用程序集''Microsoft''Framework.NETCore''v4.5''System.Runtime.WindowsRuntime.dll
听起来你可能错过了第二个参考。我能够使用4.6.1版本的v4.5.NetCore框架。