Uwp DeviceWatcher和BluetoothLEAdvertisementWatcher类与Timeout属性之间的差异

Uwp DeviceWatcher和BluetoothLEAdvertisementWatcher类与Timeout属性之间的差异,uwp,timeout,connection,bluetooth-lowenergy,ads,Uwp,Timeout,Connection,Bluetooth Lowenergy,Ads,我构建了一个Windows10应用程序,它可以监视特定的广告并与之连接 我用了一点编辑的例子。在本例中,他们使用了“DeviceWatcher”类 但我现在尝试添加超时,以便在特定时间段后断开连接。 我找到了这个属性:OutOfRangeTimeout,它属于BluetoothLEAdvertisementWatcher类 现在我很困惑“DeviceWatcher”和“BluetoothLEAdvertisementWatcher”之间有什么区别 有没有办法使用DeviceWatcher类添加“

我构建了一个Windows10应用程序,它可以监视特定的广告并与之连接

我用了一点编辑的例子。在本例中,他们使用了“DeviceWatcher”类

但我现在尝试添加超时,以便在特定时间段后断开连接。 我找到了这个属性:OutOfRangeTimeout,它属于BluetoothLEAdvertisementWatcher类

现在我很困惑“DeviceWatcher”和“BluetoothLEAdvertisementWatcher”之间有什么区别


有没有办法使用DeviceWatcher类添加“超时”?

在“DeviceWatcher”类和
BluetoothLEAdvertisementWatcher
类之间有很大的区别。deviceWacher位于系统级;这意味着您必须先在Windows设置中添加设备,然后才能找到它。这也意味着该设备始终存在于Windows.Devices.Enumeration中,除非您将其从Windows设置中删除。设备监视程序需要很长时间才能完成。此外,为了使应用程序运行良好,您必须实现所有添加、删除和更新的事件,以便在设备添加、删除或更新时收到通知。如果应用程序仅处理添加的事件,则如果在初始设备枚举完成后将设备添加到系统中,则不会收到更新

BluetoothLEAdvertisementWatcher仅侦听发送广告且触手可及的BLE设备。如果将
scanMode
设置为active,则观察者将尝试获取设备上的所有信息,如名称、功能、ble地址、服务广告有效负载等。将其设置为
scanMode
被动,观察者将仅使用名称和ble地址侦听设备,这会更快

扫描时间仅取决于触手可及的设备数量及其广告间隔。
OutOfRangeTimeout
指的是决定设备是否够不着的
BluetoothSignalStrengthFilter

关于断开连接的超时:


蓝牙LE设备API不提供对设备连接的直接控制。相反,如果没有未完成的引用,蓝牙堆栈将在一秒钟超时后断开设备。因此,您必须使用计时器设置超时,关闭并处理设备

>OutOfRangeTimeout是指Bluetooth Signal StrengthFilter,用于确定设备是否超出范围。但是,当它决定设备无法触及时,它会怎么做?BluetoothLEAdvertisementWatcher.Received事件根据收到的广告数据包触发。@Frank Schwieterman,你应该在新问题中问这个问题,但这里有一个简短的答案:如果广告设备RSSI值大于或等于InRangeSholdindBm,并且OutOfRangeTimeout尚未过期。该设备被视为在范围内。RSSI读数将显示实际值。如果广告设备RSSI值小于或等于OutOfRangeSthresholdindBm,则计时器将重置,当计时器过期时,设备将被视为超出范围。RSSI读数将显示稳定值-127,直到再次达到。@GrooverFromHolland我正在试用DeviceWatcher,没有看到您描述的行为。我正在测试的设备是一个可移动的运动传感器。它使用GATT配置文件报告坐标。我没有在Windows设置中添加它。但与您提到的不同,DeviceWatcher会在我打开和关闭设备时报告添加和删除的事件。对于我的应用程序,我需要启动时可用的设备。如果不可用,应用程序应立即退出。所以在启动时扫描一次对我来说应该足够好了。BluetoothLEAdvertisementWatcher会让我受益吗?@Gene Pavlovsky,Bluetooth设备的Windows.Devices.Enumeration查询(DeviceWatcher)会进行约30秒的活动扫描,然后取消所有扫描活动,以防止干扰其他Bluetooth设备。扫描后,可以通过其他方式(如定向广告)、通过白名单或广告观察者找到设备,结果仍会发送到枚举API(DeviceWatcher),但速度较慢。对于更长时间的扫描,甚至是永久性扫描,建议使用BluetoothLEAdvertisementWatcher。@GrooverFromHolland感谢您提供的信息。所以我已经有了基于DeviceWatcher的工作代码。我只需要在启动时扫描设备-如果找不到,程序应该退出。将代码修改为使用BluetoothLEAdvertisementWatcher是否有任何好处(例如可靠性、扫描速度)?