过去2个小时我一直坚持这个问题,我即将放弃。我用Google搜索了很多,但找不到有用的东西。我使用的是最新版本的XCode。
我想通过Bluetooth Low Energy发送PNG图像,在这种情况下接收器是Bleno。我尝试过的事情包括将图像转换为Base64字符串并将图像转换为UInt8数组并逐个发送数组中的每个条目。
我没有做任何工作,因此唯一的“工作”代码是将图像转换为字节,这就是:
let testImage = UIImage(named: "smallImage")
let imageData = UIImagePNGRepresentation(testImage!)
我已经拥有了BLE的所有连接代码,并且能够成功地向Bleno发送一个简单的短字符串。我也通过“peripheral.maximumWriteValueLength”知道我一次可以发送的最大字节数是512字节,虽然我可以想象使用Low Energy会降低这个最大值。我正在尝试使用peripheral.writeValue发送数据,目前看起来像这样(数组是我试过的UInt8数组):
peripheral.writeValue(Data(bytes:array), for: char, type: CBCharacteristicWriteType.withResponse)
我经常得到的错误是Error Domain=CBATTErrorDomain Code=13 "The value's length is invalid."
,我假设这是因为我尝试发送的数据超过512个字节。我尝试用小于512字节的软件包发送数据,但就像我说的那样,我无法让它工作。
简而言之,我的问题是:如何通过BLE发送PNG图像(多个部分)?
编辑:我有一些工作要做,尽管它很慢,因为它没有利用每个数据包的完整20个字节:
let buffer: [UInt8] = Array(UIImagePNGRepresentation(testImage!)!)
let start = "I:"+String(buffer.count)
peripheral.writeValue(start.data(using: .utf8)!, for: char, type: CBCharacteristicWriteType.withResponse)
buffer.forEach{b in
let data = NSData(bytes: [UInt8(b)], length: MemoryLayout<UInt8>.size)
peripheral.writeValue(data as Data, for: char, type: CBCharacteristicWriteType.withResponse)
}
提前致谢!