在后台应用程序中使用 BluetoothLEAdvertisementWatcher?

Using BluetoothLEAdvertisementWatcher in background application?

我尝试在我的 Windows 10 IOT 后台(无头)应用程序 运行 中扫描 BLE 设备 Raspberry PI 3。

我还尝试在同一台 RaspBerry PI 机器上的带头应用程序(带有 UI)中使用 BluetoothLEAdvertisementWatcher,并且成功了。

我的无头应用是最简单的:

public sealed class StartupTask : IBackgroundTask
{
    private readonly BluetoothLEAdvertisementWatcher _bleWatcher = 
        new BluetoothLEAdvertisementWatcher();

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        _bleWatcher.Received += _bleWatcher_Received;
        _bleWatcher.ScanningMode = BluetoothLEScanningMode.Active;
        _bleWatcher.Start();
    }

    private void _bleWatcher_Received(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
    {

    }
}

_bleWatcher_Received 永远不会被击中。功能已设置(蓝牙、互联网、近距离)。

问题是什么?我想念什么?

当 运行 方法完成时,您的应用程序将关闭。这就是为什么 _bleWatcher_Received 永远不会被击中。

为了防止您的应用程序退出,您需要像这样调用“GetDeferral”方法:

public void Run(IBackgroundTaskInstance taskInstance)
{
    deferral = taskInstance.GetDeferral();

    //YOUR CODE HERE
}

更多信息请参考“Developing Background Applications”。