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

AltBeacon应用退至后台时完全停止扫描问题问询

问题描述

复现步骤

  • 打开应用
  • 前往存在Beacon设备的区域
  • 等待设备发现Beacon
  • 将应用切换至后台

实际结果

  • 在Logcat中发现日志:"我们处于Beacon区域内,周期之间不会执行扫描。"
  • 返回的测距Beacon数组为空(有时无返回)
  • 应用完全停止扫描;区域监测功能看似正常,但仍在测试中

预期结果

我认为该库应执行低功耗扫描,即调用以下代码:

mScanHelper.startAndroidOBackgroundScan(mScanState.getBeaconParsers());

请问此现象是有意设计,还是属于Bug或未完成的代码?相关代码片段来自ScanJob.java:

private void startPassiveScanIfNeeded() {
    if (mScanState != null) {
        LogManager.d(TAG, "检查是否需要启动被动扫描");
        boolean insideAnyRegion = mScanState.getMonitoringStatus().insideAnyRegion();
        if (insideAnyRegion) {
            // TODO: 设置扫描过滤器,排除已检测到的Beacon模式
            LogManager.i(TAG, "我们处于Beacon区域内,周期之间不会执行扫描。");
        }
        else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                if (mScanHelper != null) {
                    mScanHelper.startAndroidOBackgroundScan(mScanState.getBeaconParsers());
                }
            }
            else {
                LogManager.d(TAG, "当前不是Android O系统,使用ScanJob时周期之间不执行扫描");
            }
        }
    }
}

解答

从代码中的TODO注释可以明确,这是未完成的代码。

当前逻辑是当设备处于Beacon区域内时,直接跳过被动扫描启动,但注释明确标注要设置扫描过滤器来排除已检测到的Beacon模式——这说明原本的设计应该是在区域内仍执行低功耗扫描,只是过滤掉已发现的Beacon,避免重复检测,同时保留对新Beacon的扫描能力。

目前的实现相当于完全禁用了区域内的被动扫描,这显然是功能未完成的状态,并非有意设计的行为。如果需要后台持续测距,你可以临时修改这段代码,在insideAnyRegion为true的分支中调用startAndroidOBackgroundScan方法,后续可等待官方完善扫描过滤器的逻辑。


内容的提问来源于stack exchange,提问作者Володя Попадюк

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 07:03:15