【发布时间】:2013-10-10 14:49:28
【问题描述】:
我在 iPhone 5C 和 iPhone 5S 上使用 CoreBluetooth 时遇到了一个奇怪的问题。 根据场景,我将接收 83 个字节的数据,按 20 个字节分块(共有 5 个块)。 iPhone 5S/5C 上的数据不同(请参阅下面的转储):在这些设备下,块 #4 替换了块 #3。 但在 iPad3(带有 6.1 和 7.0.2 iOS)上一切正常
// iPhone 5C, iOS 7.0.2
nRF UART[237:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[237:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[237:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[237:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[237:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
// iPad 3, iOS 6.1.3 && iPad 3, iOS 7.0.2
nRF UART[221:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[221:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[221:60b] Received data on a characteristic. 07=2013.010,0x08=001
nRF UART[221:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[221:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
// iPhone 4S, iOS 6.1.3
nRF UART[241:60b] Received data on a characteristic. 0x01=001,0x02=5B2226
nRF UART[241:60b] Received data on a characteristic. 400192,0x05=1.0.0,0x
nRF UART[241:60b] Received data on a characteristic. 07=2013.010,0x08=001
nRF UART[241:60b] Received data on a characteristic. ,0x09=2,0x0a=0,0x0b=
nRF UART[241:60b] Received data on a characteristic. 100ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
我的问题是:如何从 5S/5C 设备中获取正常数据?或许,CBCharacteristic 或 CBCentralManager 有一些技巧?
谢谢。
编辑
正如 @allprog 所建议的,这里是我如何使用 CoreBluetooth 的代码片段。
这是非常基本的方法:
// CBCentralManager init
self.cm = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
// Getting data chunks from CBCharacteristic in CBPeripheral's Delegate
- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
if (error)
{
NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
return;
}
NSLog(@"Received data on a characteristic. %s", [[characteristic value] bytes]);
// ... the rest of code
}
【问题讨论】:
-
另外,你有没有试过降低数据发送的速度?这是一个一致的错误还是仅偶尔发生?如果您使用通知,那么这些可能会丢失。使用专用队列初始化 CBCentralManager 以避免主队列过载。你能展示处理数据接收的代码部分吗?或者,改为使用适应症。它们速度较慢但可靠。
标签: iphone ios objective-c core-bluetooth