设备关闭 BLE 时的 BluetoothLEAdvertisementWatcher - UWP
Posted
技术标签:
【中文标题】设备关闭 BLE 时的 BluetoothLEAdvertisementWatcher - UWP【英文标题】:BluetoothLEAdvertisementWatcher when device turn off BLE - UWP 【发布时间】:2019-12-16 07:54:59 【问题描述】:我做了什么:
我有一个可观察的集合Display
。
当我收到BluetoothLEAdvertisementWatcher.Received
事件时,我会检查 RSSI。
如果RSSI > -65DBm,我将设备添加到Display
。
(RSSI 变为 -60 > -127 > -57 > -127 > -63 > -127 >......我有点好奇这是否正常)
问题:
当用户关闭设备的BT/BLE时,我可以“捕捉”吗?
这样我就可以从Display
删除相应的设备。
唯一的事件是Received
和Stopped
,我认为这不可能像devicewatcher 那样,但仍然......
如果这是不可能的,那也没关系;请评论/回答“这无法完成”,所以我不会白白研究:)
任何帮助表示赞赏!
【问题讨论】:
您是否为设备观察者添加了SignalStrengthFilter
?
您好,感谢您的评论!我确实添加了过滤器,但是由于我创建的可观察集合没有绑定到观察者(即我需要从列表中手动添加/删除 obj),我觉得它没有意义。有什么方法可以让我了解特定设备是否被认为超出范围?
【参考方案1】:
RSSI 像 -60 > -127 > -57 > -127 > -63 > -127 >......我有点好奇这是否正常
这是正常现象,取决于您的蓝牙设备灵敏度。如果您设置了以下内容,他将过滤掉不匹配的数据。但是对于我的测试,-127
将被观察者捕获。
watcher.SignalStrengthFilter.InRangeThresholdInDBm = -70;
watcher.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;
如果 RSSI > -65DBm,我将设备添加到 Display
您可以使用eventArgs.RawSignalStrengthInDBm
在OnAdvertisementReceived
事件处理程序中获取RSSI 值。然后做二次过滤。
Int16 rssi = eventArgs.RawSignalStrengthInDBm;
if (rssi >= -65)
// add to collection.
有什么方法可以让我知道某个特定设备是否被认为超出了范围?
目前还没有这样的 api 来检测特定设备是否超出范围。
【讨论】:
您好,谢谢您的解释!我应该更清楚地提到上述步骤是我目前正在做的(即已经完成);无论如何,谢谢你的第二部分。 回到故事,所以 RSSI 行为是正常的,目前没有办法检测特定设备是否超出范围。 酷酷!非常感谢你的帮助。希望你有一个美好的一天:)以上是关于设备关闭 BLE 时的 BluetoothLEAdvertisementWatcher - UWP的主要内容,如果未能解决你的问题,请参考以下文章
强制关闭连接到 Android 应用程序的 BLE 设备会触发状态为 8 的 onConnectionStateChange
用于打开/关闭 LED 的 BLE 设备(服务器)的 GATT 配置文件