首页 > 解决方案 > 在 IOS13 上的 Xamarin 中订阅外设特性时遇到问题

问题描述

我使用 BLE 连接到设备。该设备具有每 20 毫秒返回一次值的特性。我正在使用 SetNotifyValue(true, characteristic) 订阅一个特征。在 iOS 13 上,特征值的数量如此之大,以至于阻塞了整个应用程序。以前的版本没有这个问题。根据我的应用程序输出,iOS 13 接收到的数据量要大得多。

特征值被添加到队列中。然后我在另一个线程中读取/出列它们。在以前的 iOS 版本中,队列永远不会超过个位数。在 iOS 13 上,队列的大小迅速增长。在我停止应用程序之前,它达到了 10 000+。这些值的添加速度如此之快,以至于线程永远无法访问队列并将它们出列。

有没有人遇到过这个或类似的问题?我正在寻求有关如何进一步调查此行为原因的建议/建议。

我想看看是否每个订阅特性都这样做。我检查了电池百分比特性并订阅它工作正常。

如果在将值添加到队列之前大小超过 n,我尝试清空队列。这无济于事,因为值仍然以相同的速度出现,并且另一个线程仍然无法访问队列以使值出列。

我从有问题的特征中删除了 SetNotifyValue(true, characteristic) 并添加了一个计时器,该计时器将按时间间隔读取特征值。我尝试了不同的时间间隔(20ms / 50ms / 500ms / 10000ms)。看起来它仍然以某种方式订阅了该特性,因为应用程序输出与以前相同。

我目前不确定是否允许我显示任何/多少代码。

这是应用程序的输出。每行打印出最后 22 个接收到的值。我已经缩短了它以便于概述。我添加了这个来显示接收数据的速度。这是从 UpdatedCharacterteristicValue 打印出来的。

iOS 13:

[13:27:38.0410] 22 个值

[13:27:38.0416] 22 个值

[13:27:38.0423] 22 个值

[13:27:38.0430] 22 个值

[13:27:38.0435] 22 个值

[13:27:38.0440] 22 个值

[13:27:38.0445] 22 个值

[13:27:38.0450] 22 个值

[13:27:38.0455] 22 个值

[13:27:38.0461] 22 个值

[13:27:38.0465] 22 个值

iOS 10.3.4:

[13:20:19.0000] 22 个值

[13:20:19.0840] 22 个值

[13:20:20.0680] 22 个值

[13:20:21.0491] 22 个值

[13:20:22.0361] 22 个值

[13:20:23.0171] 22 个值

[13:20:24.0009] 22 个值

[13:20:24.0852] 22 个值

[13:20:25.0690] 22 个值

[13:20:26.0500] 22 个值

[13:20:27.0310] 22 个值

标签: xamarinbluetooth-lowenergyios13

解决方案


问题是我在 UpdatedCharacteristicValue 中调用了 readValue。

在查看 nrfConnect 时,设备没有此特性的读取选项,仅通知。我的猜测是以前的版本处理这个不同。在 iOS 13 上再次进行了订阅。

删除 readValue() 调用后,应用程序现在按预期运行。

我还要感谢 Apple 支持帮助我联系硬件人员。在我的代码中找到错误至关重要。


推荐阅读