【问题标题】:Difference between DeviceWatcher and BluetoothLEAdvertisementWatcher class and Timeout propertyDeviceWatcher 和 BluetoothLEAdvertisementWatcher 类和 Timeout 属性之间的区别
【发布时间】:2018-10-17 00:34:44
【问题描述】:

我构建了一个 Windows 10 应用程序,用于监视特定广告并与之连接。

我使用了示例"BluetoothLE" from "Windows-universal-samples" 并进行了一些修改。在这个例子中,他们使用了“DeviceWatcher”类。

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

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

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

【问题讨论】:

    标签: uwp timeout connection bluetooth-lowenergy ads


    【解决方案1】:

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

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

    扫描时间仅取决于到达的设备数量及其广告间隔。 OutOfRangeTimeout 指的是BluetoothSignalStrengthFilter,它决定设备是否遥不可及。

    至于断开连接的超时时间:

    蓝牙 LE 设备 API 不提供对设备连接的直接控制。相反,如果没有未完成的引用,蓝牙堆栈将在一秒超时后断开设备。所以你必须使用定时器来设置你的 timeOut 并关闭和处理设备!

    【讨论】:

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