我正在运行以下代码:
[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse];
在我的情况下(iPhone 7,iOS 10.0.2),它返回512.这个号码是什么意思?
来自文档:
方法maximumWriteValueLengthForType:
可以在单个写入类型中发送到特征的最大数据量(以字节为单位)。
但是,如果我尝试发送500
或600 bytes
,它的工作方式完全相同。目标设备接收所有数据。在这两种情况下都不会调用响应回调。
答案 0 :(得分:1)
据我了解,理论上它应该返回ATT MTU大小,因为它是从中心到外围设备的请求。从外围方面来看,类似的值为central.maximumUpdateValueLength
,建议避免发送特征值大于central.maximumUpdateValueLength
的通知。但不幸的是,这并没有明确记录,而Apple自己的例子(BTETransfer应用程序)使用默认的ATT MTU大小为20是安全的。对于通知,我认为,如果您尝试更改超过central.maximumUpdateValueLength
个字节,可能会发生错误。
但是从我在Android上的实验中,我发现从另一端 - 中心端 - 正在进行某种缓存,并且可以发送比当前ATT MTU大小更多的字节(在Android上,它可用通过onMtuChanged
,似乎也可以在连接后立即协商到512。因此,我们可以假设在iOS上进行相同类型的缓存,但我不确定它可以达到多大。在Android上,我们至少有写回调来知道何时可以安全地写入更多数据。在iOS上,不确定如果我们尝试写入会发生什么,让我们说中心端的可写特性为1MB。但我今天会试试。
此外,iOS版本的行为可能会有所不同,因为自iOS 7以来central.maximumUpdateValueLength
可用,但自iOS 9以来只有peripheral maximumWriteValueLengthForType
。