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

如何在RxAndroidBle中设置10秒的扫描超时?

在RxAndroidBle中设置10秒扫描超时的方案

嘿,这事儿好办!要给RxAndroidBle的扫描加10秒超时,用RxJava的操作符就能轻松实现,我给你两种常用的方案,你看哪种适合你的场景:

方案一:用take()直接指定扫描时长(最简洁)

这个方法会让扫描Observable在10秒后自动发送onComplete信号,RxAndroidBle会自动停止扫描,非常直观:

scanDisposable = rxBleClient.scanBleDevices(
        new ScanSettings.Builder()
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
                .build(),
        new ScanFilter.Builder()
                .setDeviceAddress("B4:99:4C:34:DC:8B")
                .build()
)
// 核心:添加10秒超时,到点自动结束扫描
.take(10, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doFinally(this::dispose)
.subscribe(
        resultsAdapter::addScanResult,
        throwable -> {
            // 处理扫描过程中的错误(比如蓝牙未开启等)
            if (throwable instanceof RxBleScanException) {
                // 这里可以针对性处理扫描异常
            }
        },
        () -> {
            // 扫描正常结束(包括10秒超时结束)
            // 可以在这里给用户提示,比如"扫描已结束"
        }
);

方案二:用takeUntil()结合timer()(更灵活)

如果你需要在超时前做一些额外逻辑,或者想更精准控制超时触发时机,可以用这个方案:

scanDisposable = rxBleClient.scanBleDevices(
        new ScanSettings.Builder()
                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES)
                .build(),
        new ScanFilter.Builder()
                .setDeviceAddress("B4:99:4C:34:DC:8B")
                .build()
)
// 当timer在10秒后发射数据时,立即停止扫描
.takeUntil(Observable.timer(10, TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.doFinally(this::dispose)
.subscribe(
        resultsAdapter::addScanResult,
        throwable -> {
            // 处理扫描错误
        },
        () -> {
            // 扫描结束回调
        }
);

注意点

  • 你已经添加的doFinally(this::dispose)非常关键,它会在扫描结束(不管是超时完成、错误终止还是手动停止)时自动释放资源,避免内存泄漏。
  • 如果需要区分“超时结束”和“找到目标设备后手动停止”,可以在onComplete回调里做额外判断,或者给timer的发射数据加标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:22