当应用处于后台时,AltBeacon将完全停止扫描
重现步骤
- 打开应用
- 前往有信标的区域
- 等待发现
- 将应用置于后台
-
实际结果:
-
在logcat中找到 "We are inside a beacon region. We will not scan between cycles."
- 返回的在范围内的信标数组为空(有时什么也没有)
- 应用完全停止扫描。 看起来区域监控在工作,但我仍在测试阶段。
- 期望结果:我认为库应该进行省电的扫描。我是说调用
mScanHelper.startAndroidOBackgroundScan(mScanState.getBeaconParsers());
有没有任何理由认为这是有意为之,还是这是一个错误或未完成的代码。
ScanJob.java
private void startPassiveScanIfNeeded() {
if (mScanState != null) {
LogManager.d(TAG, "Checking to see if we need to start a passive scan");
boolean insideAnyRegion = mScanState.getMonitoringStatus().insideAnyRegion();
if (insideAnyRegion) {
// TODO: Set up a scan filter for not detecting a beacon pattern
LogManager.i(TAG, "We are inside a beacon region. We will not scan between cycles.");
}
else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (mScanHelper != null) {
mScanHelper.startAndroidOBackgroundScan(mScanState.getBeaconParsers());
}
}
else {
LogManager.d(TAG, "This is not Android O. No scanning between cycles when using ScanJob");
}
}
}
}
解决方案
库在确认信标可见时会持续停止扫描以节省电量——周围有信标时持续开启扫描在功耗方面成本很高。库仍然会进行周期性扫描来查找信标,具体由backgroundScanPeriod / backgroundBetweenScanPeriod设置决定。按设计,你应该会看到扫描在每个后台扫描周期结束时定期重新启动:
- 你将收到该周期内检测到的所有信标的ranging回调。
- 如果在该周期内未发现任何信标,且regionExitPeriod毫秒内也未发现过信标,你将收到一个监测退出通知。
- 同样在情况2 下,库将启动后台扫描以继续寻找新出现的信标。(如果周围没有信标,这并不耗费额外资源。)
你展示的代码块是决定重新启动后台扫描的位置。为何它没有起作用,可能是你的测试用例有问题,或者你观察到的情况在某些方面与实际情况不完全一致。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。