我正在发布具有三个特征的蓝牙LE服务。我在前两个特征的每一个上写入512字节的数据,在第二个特征上写入1个字节。写得很正常。我知道这是因为我使用第二个设备(iOS 8.x)浏览设备,他们找到对方并正确读取数据。但是,当使用iOS 7.1.2在iPhone 4S上读取相同的特性时,每个特征只能获得268个字节的数据,而不是完整的512个字节。
要阅读数据,我在-peripheral:didDiscoverCharacteristicsForService:error:
for (CBCharacteristic * characteristic in service.characteristics) {
//[peripheral setNotifyValue:YES forCharacteristic:characteristic];
[peripheral readValueForCharacteristic:characteristic];
}
我也尝试了-setNotifyValue:forCharacteristic:
行未注释。我在-peripheral:didUpdateValueForCharacteristic:error:
中获得了数据。同样,数据在iOS 8.x上正确读取,但不能正确读取7.会发生的是每个特性的数据被截断为268个字节。也就是说,我得到第一个和第二个的前268个字节,然后得到第三个字节的完整1个字节。
任何人都有这样的经历吗?有人可以复制或帮助吗? 最好的。
编辑:正如@ Paulw11在评论中回复的那样,here发布了同样的问题并提供了解决方案。我测试了它,不仅解决了问题,而且传输数据的速度也快得多。问题是,它以串行方式传输数据,这在我的情况下我看不出如何应用。问题是:我有一个恒定数量的外围设备发布到固定数量的特征,但有几个中心从它读取数据。几个中心正在读取数据这一事实阻止我连续(我认为)这样做,因为几个中心无法同时读取。