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

如何实现双通道Bluetooth GATT服务特征写入避免断开连接(状态133)

解决BLE写入第二个特征触发断开(状态码133)的问题

1. 排查设备端特征属性配置

  • 用nrf Connect查看第二个特征的属性(Properties),确认是否包含Write(带响应写入)权限——你当前用的是WRITE_TYPE_DEFAULT,要求设备端必须支持带响应的写入操作。如果设备端仅配置了Write Without Response,用默认写入类型会直接触发错误。
  • nrf显示该特征为unknown_characteristic(2),需确认设备端的GATT服务定义:是否正确设置了该特征的UUID、属性,以及对应的写入处理逻辑(比如是否能正常回复GATT写入响应)。

2. 匹配写入类型与特征属性

  • 尝试将第二个特征的写入类型改为WRITE_TYPE_NO_RESPONSE,和第一个特征一致,测试是否还会断开:
    // 修改function2的写入类型
    mTxCharacteristic2.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE
    mTxCharacteristic2.value = chunk
    gatt.writeCharacteristic(mTxCharacteristic2)
    
  • 如果此方式能正常工作,说明设备端该特征不支持带响应写入,需统一写入类型,或修改设备端的特征属性配置。

3. 修正可靠写入的使用方式

  • 你之前使用可靠写入时错误添加了setCharacteristicNotification,通知与可靠写入无关,应移除该行代码。正确的可靠写入流程如下:
    // 开始可靠写入
    if (gatt.beginReliableWrite()) {
        mTxCharacteristic2.value = chunk
        gatt.writeCharacteristic(mTxCharacteristic2)
        // 不要直接调用executeReliableWrite,需等onCharacteristicWrite回调确认写入成功后再执行
    }
    
  • 在onCharacteristicWrite回调中,判断写入对象为mTxCharacteristic2且状态成功后,再执行提交:
    override fun onCharacteristicWrite(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?, status: Int) {
        super.onCharacteristicWrite(gatt, characteristic, status)
        if (characteristic?.uuid == mTxCharacteristic2.uuid && status == BluetoothGatt.GATT_SUCCESS) {
            gatt?.executeReliableWrite()
        } else {
            // 写入失败,取消可靠写入
            gatt?.abortReliableWrite()
        }
    }
    
  • 注意:若设备端不支持可靠写入,此方式也会触发错误,需先确认设备端的支持情况。

4. 清理BLE栈缓存,避免重启设备才能重连

  • 断开连接后,不要直接尝试重连,先调用gatt.close()释放资源,再通过device.connectGatt(context, false, gattCallback)获取新的BluetoothGatt实例,清除安卓BLE栈中缓存的旧服务/特征信息,避免因缓存导致重连失败。

5. 排查并发写入问题

  • 确保BLE操作串行执行,不要在一个写入操作的回调未返回前发起另一个写入。可维护一个操作队列,仅当前操作完成后,再执行下一个任务。

内容的提问来源于stack exchange,提问作者Shivam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:21:24