0

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

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

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

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

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

4

1 回答 1

0

没有看到代码就不可能肯定地说,但我怀疑库在您的应用程序的某个时刻停止扫描。您提到了绑定和取消绑定到 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 来简化您的方法,而是将库附加到 AndroidApplication类。这是首选方法,并使用此处显示的参考应用程序中所述 的RegionBootstrap和: https ://github.com/AltBeacon/android-beacon-library-reference/blob/master/src/org/altbeacon/beaconreference/BeaconReferenceApplication .javaBackgroundPowerSaver

于 2014-10-07T15:15:25.413 回答