You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:22:41