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,提问作者Володя Попадюк
相关产品推荐
相关产品推荐

