我正在尝试在作为后台服务运行的应用程序中使用Android Beacon Library。我在我的服务启动时绑定了beaconManager。我正在onDestroy callBack中取消绑定它。
我设置iBeaconManager与setBackGroundScan期和setBackGroundBetweenScan期与一些默认值。
每当我运行应用程序时,我的服务都会被调用,它会自动扫描信标。回调方法didIntRegion和didExitRegion是根据信标可用性调用的,在didIntRegion callBack方法中,我调用startRangingBeaconsInRegion。
当我在同一个区域时,一切都很好。如果我离开一个遥远的位置,然后重新进入同一个位置,它就不会扫描信标。
位置改变真的会影响信标扫描吗?或者它只在特定时间扫描?任何人请帮我解决这个问题。提前感谢。
在没有看到代码的情况下无法确定,但我怀疑库在您的应用程序中的某个时间点停止了扫描。您提到了一个绑定和取消绑定到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
类。这是首选方法,并使用Region onBootstrap
和Back地PowerSaver
,如此处显示的参考应用程序中所述:https://github.com/AltBeacon/android-beacon-library-reference/blob/master/src/org/altbeacon/beaconreference/BeaconReferenceApplication.java