ios - [外设maximumWriteValueLengthForType :CBCharacteristicWriteWithResponse] return?]是什么意思

标签 ios objective-c bluetooth-lowenergy

我正在运行以下代码:

[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse];

就我而言(iPhone 7、iOS 10.0.2),它返回 512。这个数字的含义是什么?

来自文档:

method maximumWriteValueLengthForType:

The maximum amount of data, in bytes, that can be sent to a characteristic in a single write type.

但是如果我尝试发送 500600 字节,它的工作原理完全相同。目标设备接收所有数据。并且在这两种情况下都不会调用响应回调。

最佳答案

据我了解,理论上它应该返回 ATT MTU 大小,因为它是从中央设备向外围设备请求的。从Peripheral侧来看,类似的值是central.maximumUpdateValueLength,建议避免发送特征值大于central.maximumUpdateValueLength的通知。但不幸的是,这没有明确记录,并且 Apple 自己的示例(BTETransfer 应用程序)使用默认 ATT MTU 大小 20 以确保安全。对于通知,我认为,如果您尝试更改超过 central.maximumUpdateValueLength 字节,则可能会发生不好的事情。

但是从我在 Android 上的实验中,我发现从另一侧(中央侧)正在进行某种缓存,并且有可能发送比当前 ATT MTU 大小更多的字节(在 Android 上,可以使用通过 onMtuChanged 并且似乎也在连接后立即协商到 512)。因此,我们可能会假设 iOS 上正在进行相同类型的缓存,但我不确定它可以有多大。在 Android 上,我们至少有写入回调来知道何时可以安全地写入更多数据。在 iOS 上,不确定如果我们尝试写入(假设从中央侧写入 1MB)会发生什么。但我今天会尝试一下。

此外,iOS 版本之间的行为可能会有所不同,因为 central.maximumUpdateValueLength 自 iOS 7 起可用,但 peripheral MaximumWriteValueLengthForType 仅自 iOS 9 起可用。

关于ios - [外设maximumWriteValueLengthForType :CBCharacteristicWriteWithResponse] return?]是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41289783/

相关文章:

ios - 用动画填充完整 UIImage 的 UIImageView 百分比

java - 相当于 Objective-C 的 Guava Preconditions.checkNotNull(...) 吗?

ios - 以编程方式从我的 iOS 应用程序中的外部摄像头电路传输图片

iphone - 如何删除 UITextView 中的单个字符

java - 如何将信标名称插入数据库?

bluetooth - Galaxy Buds+ 使用双 BT 堆栈吗?

ios - Snow Leopard vs. Lion上的iOS Dev:我会失去任何功能吗?

ios - 以编程方式在 View Controller 中设置 UITableView

ios - 点击时文本字段消失

objective-c - 如何获取登录用户的头像?