一旦我超出范围并再次进入该区域,就不会扫描信标
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
类。这是首选方法,并使用RegionBootstrap
和BackgroundPowerSaver
,如此处显示的参考应用程序所述:https://github.com/AltBeacon/android-beacon-library-reference/blob/master/src/org/altbeacon/beaconreference/BeaconReferenceApplication.java
【讨论】:
感谢@davidgyoung 的回复,并且您提到的BackgroundPowerSaver 可以在新库中使用,因为现在我正在使用以前的版本,是的,后台服务正在运行,我什至发现当屏幕我的手机自动锁定蓝牙正在停止扫描。屏幕关闭时图书馆是否会停止扫描? 如果您可以附加一些调试日志(如我上面的答案),那将非常有帮助。使用 0.x 版本的库,使用 IBeaconManager.setDebug(true) 启用调试以上是关于一旦我超出范围并再次进入该区域,就不会扫描信标的主要内容,如果未能解决你的问题,请参考以下文章