ios - 每 10 秒才收到一次来自中央的数据,为什么?

标签 ios swift core-bluetooth cbperipheral

外围设备设置为通过一项服务进行广告,其中添加了两个特征。其特点之一是属性通知和权限可读。另一个特点是属性写和权限可写。第二个提到的特性用于从中央到外围的通信,这就是问题所在。

好像有10秒一个周期。在 10 秒的时间范围内,最多只能收到一个预期的包裹。另外,如果中心在发送数据后 10 秒发送数据,而外设立即收到预期的数据包,则不到一秒。

您可以通过调试器的输出明白我的意思。

Every 4 seconds data is trying to be sent to peripheral.

2017 年 2 月 15 日编辑 * 为了更好地澄清这个问题,我将提供有关调试器输出的更多信息。你在这里看到的是正在调试的中央。措辞“writeValue”表示数据已发送,措辞“didWriteValueFor”表示确认数据已成功到达外设。这个确认是在委托(delegate)方法中调用的:

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) 

*

就好像在最后一次接收数据后,所描述方向的通信被阻塞 10 秒,然后再次打开。是否可以防止这种阻塞?外围设备需要立即收到通知,而不仅仅是每 10 秒收到一次通知。我确信我配置错误或者我忘记了一些重要的东西。

非常感谢您的帮助。

最佳答案

终于,从 iOS 中央设备到 iOS 外设的数据传输达到了不错的速度。为了实现这一目标,我必须做出两项更改,它们是直接相互关联的。 iOS 外围端和 iOS 中央端都进行了更改。 解决方案的一部分是在 iOS 外设端配置 CBMutableCharacteristic 对象。我已将其属性设置为“Writable With Response”,但为了按照我需要的速度进行通信,我现在将其设置为“Writable Without Response”。 因此 CBMutableCharacteristic 对象的实例化如下所示:

let characteristicWritableWithoutResponseCBMutableCharacteristic.init(type: CBUUID.init(string: TRANSFER_CHARACTERISTIC_UUID), properties: CBCharacteristicProperties.writeWithoutResponse, value: nil, permissions: CBAttributePermissions.writeable)

解决方案的另一部分在中央一侧。由于 CBMutableCharacteristic 对象是用“writeWithoutResponse”实例化的,我必须将方法 writeValue 的参数类型从 CBCharacteristicWriteType.withResponse 更改为 CBCharacteristicWriteType.withoutResponse。现在看起来像这样:

currentPeripheral.writeValue(newPayload, for: writableCharacteristic, type: CBCharacteristicWriteType.withoutResponse)

从中央到外设的数据传输时间现在远低于一秒。尽管我必须提到中央发送的数据非常少(最初是数据类型 double 的值)。 我希望这对其他人也有帮助。

关于ios - 每 10 秒才收到一次来自中央的数据,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42174474/

相关文章:

ios - 如果我续订我的服务器证书并且我的应用程序正在进行证书固定,会发生什么情况?

ios - 更改 UIView 的 alpha 会影响字体不透明度

iPhone 设置页面中未发现 IOS 蓝牙

ios - 如何将 Apple Watch 检测为蓝牙外设

ios - 核心蓝牙 peripheral.name 为 nil

ios - scheduledLocalNotifications 数组为空

ios - 显示包含核心数据的部分

ios - 在 Objective-C 项目中找不到 Swift 类

ios - 如何通过 Carthage 在 Xcode 中编辑或安装框架文件?

ios - Annotation Map View 中的引脚颜色没有改变