在过去的 2 个小时里,我一直被这个问题困扰,我即将放弃。我用谷歌搜索了很多,只是找不到有用的东西。我正在使用最新版本的 XCode。
我想通过低功耗蓝牙发送 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)
}
提前致谢!