如何在iOS Swift中实现Android Java版BLE字符串发送逻辑?
iOS Swift 对应实现方案
首先确保项目已导入CoreBluetooth框架,并且你已经持有有效的CBPeripheral实例、硬件版本变量以及对应的服务/特征UUID常量。以下是对应原Java逻辑的Swift实现:
// 定义所需的UUID常量(替换为你的实际UUID值) private let V1_SERVICE_UUID = CBUUID(string: "你的V1服务UUID") private let V1_TX_CHARACTERISTIC = CBUUID(string: "你的V1发送特征UUID") private let V2_SERVICE_UUID = CBUUID(string: "你的V2服务UUID") private let V2_TX_CHARACTERISTIC = CBUUID(string: "你的V2发送特征UUID") // 硬件版本变量(根据实际检测结果赋值) private var xBleHardwareVersion: Int = 1 // 持有BLE外设实例 private var peripheral: CBPeripheral! // 延迟执行的任务逻辑(对应原Java的btResponseHandlerRunnableCode) private let btResponseTask = { // 填入原Java中延迟执行的业务逻辑 } private func writeBluetooth(_ msg: String) { // 延迟500ms执行任务,对应原Java的postDelayed DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { self.btResponseTask() } // 将字符串转为UTF-8编码的Data,对应Java的msg.getBytes() guard let msgData = msg.data(using: .utf8) else { print("字符串转二进制数据失败") return } var resultData: Data var targetServiceUUID: CBUUID var targetCharUUID: CBUUID switch xBleHardwareVersion { case 1: // 拼接字符串数据 + 换行符(0x0d 0x0a) resultData = msgData + Data([0x0d, 0x0a]) targetServiceUUID = V1_SERVICE_UUID targetCharUUID = V1_TX_CHARACTERISTIC case 2: // 拼接头字节0x01 + 字符串数据 + 换行符 resultData = Data([0x01]) + msgData + Data([0x0d, 0x0a]) targetServiceUUID = V2_SERVICE_UUID targetCharUUID = V2_TX_CHARACTERISTIC default: print("不支持的硬件版本") return } // 查找目标BLE特征 guard let service = peripheral.services?.first(where: { $0.uuid == targetServiceUUID }), let characteristic = service.characteristics?.first(where: { $0.uuid == targetCharUUID }) else { print("未找到目标BLE特征") return } // 写入数据,对应Java的WriteType.WITHOUT_RESPONSE peripheral.writeValue(resultData, for: characteristic, type: .withoutResponse) }
关键逻辑对应说明
- 延迟任务:用
DispatchQueue.main.asyncAfter替代Java的postDelayed,实现500ms后执行指定逻辑。 - 字节拼接:Swift通过
Data类型处理二进制数据,直接用+运算符完成拼接,替代Java的concat方法。 - BLE写入:调用
CBPeripheral的writeValue(_:for:type:)方法,.withoutResponse参数对应原Java的WriteType.WITHOUT_RESPONSE。 - UUID处理:Swift中BLE服务/特征的UUID需转为
CBUUID类型,需替换为你硬件实际的UUID字符串。
内容的提问来源于stack exchange,提问作者fillibuster
相关产品推荐
相关产品推荐

