【问题标题】:Beacons are not scanned once I was out of range and again in into the region一旦我超出范围并再次进入该区域,就不会扫描信标
【发布时间】:2023-03-20 00:40:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android ibeacon ibeacon-android android-ibeacon


    【解决方案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) 启用调试
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多