如何在桌面.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调用桌面代码似乎很难部署。谢谢

如何在桌面.NET应用程序中获得BLE广告回调

刚刚在Console.NET 4.6.1应用程序中尝试了这一点,广告回调即将通过。我不久前写了一个GitHub示例,这可能会有所帮助。让WinRT API工作的关键是两个参考:

要使用WinRT API,请添加两个引用:

  1. C: ''Program Files(x86(''Windows Kits''10''UnionMetadata''Windows.winmd

  2. C: ''Program Files(x86(''引用程序集''Microsoft''Framework.NETCore''v4.5''System.Runtime.WindowsRuntime.dll

听起来你可能错过了第二个参考。我能够使用4.6.1版本的v4.5.NetCore框架。