一旦我超出范围并再次进入该区域,就不会扫描信标

Posted

技术标签:

【中文标题】一旦我超出范围并再次进入该区域,就不会扫描信标【英文标题】:Beacons are not scanned once I was out of range and again in into the region 【发布时间】:2014-10-07 11:44:25 【问题描述】:

我正在尝试在作为后台服务运行的应用程序中使用 android 信标库。我在我的服务启动时绑定了 beaconManager。我在 onDestroy 回调中解绑它。

我正在使用 setBackGroundScanPeriod 和 setBackGroundBetweenScanPeriod 设置 iBeaconManager 以及一些默认值。

每当我运行应用程序时,都会调用我的服务并自动扫描信标。回调方法 didEnterRegion 和 didExitRegion 是根据信标可用性调用的,在 didEnterRegion callBack 方法中我调用的是 startRangingBeaconsInRegion。

当我在同一地区时,一切正常。 如果我离开一个较远的位置并重新进入相​​同的位置,它不会扫描信标。

位置变化真的会影响信标扫描吗?否则它只会扫描特定时间?任何人请帮助我解决这个问题。提前致谢。

【问题讨论】:

【参考方案1】:

没有看到代码就无法确定,但我怀疑库在您的应用程序中的某个位置停止扫描。您提到了绑定和取消绑定到 BeaconManager 的后台服务。你确定你的后台服务还在运行吗?

查看 BeaconService 是否仍在扫描的一种方法是启用调试日志记录。在您的应用上完成此操作后,您可以通过 USB 电缆将应用连接到您的计算机,并使用以下行从 BeaconService 查找调试输出。

adb logcat | grep BeaconService

如果它正在扫描信标,您应该会看到如下行:

D/BeaconService(14202): Waiting to stop scan for another 1100 milliseconds
D/BeaconService(14202): Scan started
D/BeaconService(14202): Waiting to stop scan for another 100 milliseconds
D/BeaconService(14202): Done with scan cycle

时间间隔可能会更长,具体取决于库是否处于后台模式。

另一种选择是通过不绑定和解除绑定到服务中的 BeaconManger 来简化您的方法,而是将库附加到 Android Application 类。这是首选方法,并使用RegionBootstrapBackgroundPowerSaver,如此处显示的参考应用程序所述:https://github.com/AltBeacon/android-beacon-library-reference/blob/master/src/org/altbeacon/beaconreference/BeaconReferenceApplication.java

【讨论】:

感谢@davidgyoung 的回复,并且您提到的BackgroundPowerSaver 可以在新库中使用,因为现在我正在使用以前的版本,是的,后台服务正在运行,我什至发现当屏幕我的手机自动锁定蓝牙正在停止扫描。屏幕关闭时图书馆是否会停止扫描? 如果您可以附加一些调试日志(如我上面的答案),那将非常有帮助。使用 0.x 版本的库,使用 IBeaconManager.setDebug(true) 启用调试

以上是关于一旦我超出范围并再次进入该区域,就不会扫描信标的主要内容,如果未能解决你的问题,请参考以下文章

进入信标区域时如何在后台作为信标做广告

共享盘超出最大连接数?怎么解决?

Sonarqube 扫描错误,行超出范围?

SonarQube 扫描仪因线路超出范围而失败

是否在相同的 BLE 扫描中收到信标监视和测距回调

如何跳过列表索引超出范围错误而不是立即停止代码?