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

基于RxAndroidBle实现写入/通知处理:订阅特征值写入响应

使用RxAndroidBle实现写入特征后订阅通知响应的示例

我来给你补全并解释这个场景的完整实现,这是RxAndroidBle里很常见的「写入-等待通知响应」的用法:

// 假设你已经有了BLE连接的Observable实例
Observable<RxBleConnection> connectionObservable = ...; // 替换成你的BLE连接创建逻辑

// 定义对应的特征UUID
UUID WRITE_CHAR_UUID = UUID.fromString("你的写入特征UUID");
UUID TX_CHAR_UUID = UUID.fromString("你的通知特征UUID");

connectionObservable
    .flatMap(
        // 第一个函数:为目标特征设置通知,获取通知数据的Observable
        (RxBleConnection rxBleConnection) -> rxBleConnection.setupNotification(TX_CHAR_UUID),
        // 第二个双参数函数:结合连接实例和通知流,处理写入+监听响应逻辑
        (RxBleConnection rxBleConnection, Observable<byte[]> notificationObservable) -> {
            // 准备要写入BLE设备的数据
            byte[] writeData = "你要发送的指令内容".getBytes(StandardCharsets.UTF_8);
            
            // 先执行写入操作,写入完成后自动切换到通知流监听响应
            return rxBleConnection.writeCharacteristic(WRITE_CHAR_UUID, writeData)
                .switchMap(writeResult -> notificationObservable) // 写入成功后订阅通知
                .first(); // 如果只需要接收第一个响应,添加此操作符自动结束订阅
        }
    )
    .subscribe(
        responseBytes -> {
            // 处理收到的设备响应数据
            String responseContent = new String(responseBytes, StandardCharsets.UTF_8);
            Log.d("BLE", "收到设备响应:" + responseContent);
        },
        throwable -> {
            // 统一处理流中的错误(连接断开、写入失败、通知设置失败等)
            Log.e("BLE", "操作出错", throwable);
        }
    );

关键细节说明:

  • flatMap双参数重载:这个写法能同时拿到RxBleConnection实例和设置好的通知Observable,避免嵌套过多的流操作,代码结构更清晰。
  • setupNotification:调用该方法会先向BLE设备发送启用通知的指令,成功后返回的Observable会持续发射设备发来的通知数据。
  • writeCharacteristic:执行特征写入操作,返回的Observable会在写入成功时发射写入的字节数组(部分设备会返回写入确认数据)。
  • switchMap:当写入操作完成后,自动切换到通知Observable,这样就能精准监听设备针对本次写入的响应通知。如果只需要获取第一个响应,.first()会在收到数据后自动结束订阅,避免不必要的资源占用。
  • 生命周期管理:记得在合适的时机(比如Activity的onDestroy)调用Disposable.dispose()取消订阅,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:02:35