0

我正在开发适用于桌面和移动设备的 UWP 应用程序。我想使用 DeviceConnectionChangeTrigger 来识别我的 BT 设备何时在范围内,但是当我尝试使用它时,我无法注册后台任务,因为它一直返回 System.ArgumentException “值不在预期范围内。” 执行 BackgroundTaskBuilder 的“Register”方法时。

代码很简单

    var current = BackgroundExecutionManager.GetAccessStatus();
    if (current == BackgroundAccessStatus.Unspecified || current == BackgroundAccessStatus.Denied)
    {
      var result = await BackgroundExecutionManager.RequestAccessAsync();
      if (result == BackgroundAccessStatus.Denied || result == BackgroundAccessStatus.Unspecified)
        throw new Exception("You cannot register Access");
    }

    //I tested it with BT and BTLE device but no luck
    //var devices = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector());
    var devices = await DeviceInformation.FindAllAsync(BluetoothDevice.GetDeviceSelector());
    var device = devices.FirstOrDefault();
    if (device == null) throw new Exception("Device not found");

    var trigger = await DeviceConnectionChangeTrigger.FromIdAsync(device.Id);
    //trigger.MaintainConnection = true;

    var builder = new BackgroundTaskBuilder
    {
      Name = "BluetoothConnectionWatcher",
      TaskEntryPoint = typeof(BluetoothConnectionWatcherTask).FullName
    };
    builder.SetTrigger(trigger);

    //error on next line!
    var r = builder.Register();

我的项目具有蓝牙功能和一个注册了蓝牙属性的后台任务。

所有蓝牙功能都运行良好,我可以毫无问题地与设备通信。

我尝试了几个 BT 和 BTLE 设备,对于所有这些设备,我似乎都遇到了同样的问题。

我尝试了 Windows 10 的桌面版和移动版(都是最后一个快速内部版本)。同样的问题。

对于我尝试过的每个 BT 设备,代码返回的 device.Id 类似于“Bluetooth#Bluetooth00:1a:7d:da:71:0a-fc:58:fa:4c:17:0a”(当然是第二次 MAC 地址更改基于设备...)

有什么建议吗?提前致谢

4

1 回答 1

0

据我所知,对于 BLE,您应该使用为其设计的触发器。因此,如果您想了解特性变化,那么您应该使用GattCharacteristicNotificationTrigger,使用它的示例可以从我的博客中找到。

然后,如果它只是 BLE 设备可用性,并且您可以通过扫描记录数据检测到您的设备,那么请改用BluetoothLEAdvertisementWatcherTrigger。我的朋友 Juhana 在他的博客中有这样的例子。

于 2015-12-21T06:51:01.750 回答