Android 如何正确运行AltBeacon库前台服务

Android 如何正确运行AltBeacon库前台服务,android,altbeacon,Android,Altbeacon,所以,我在使用AltBeacon库,从日志文件中发现,有时无法检测到信标。所有的问题都发生在Android 8.0的设备上,所以我自然而然地认为这是因为beaconManager是作为后台服务运行的。嗯,我把应用程序带到后台,等了15分钟,然后把它打开,服务按预期工作(信标检测)。但是,实现起来很奇怪 我所做的是,我在前台运行了一个服务: Intent serviceA = new Intent(this, ServiceA.class); ContextCompat.startForegrou

所以,我在使用AltBeacon库,从日志文件中发现,有时无法检测到信标。所有的问题都发生在Android 8.0的设备上,所以我自然而然地认为这是因为beaconManager是作为后台服务运行的。嗯,我把应用程序带到后台,等了15分钟,然后把它打开,服务按预期工作(信标检测)。但是,实现起来很奇怪

我所做的是,我在前台运行了一个
服务

Intent serviceA = new Intent(this, ServiceA.class);
ContextCompat.startForegroundService(this, serviceA);
因此,lateron
服务A
调用
BManager
,启动信标管理器,如下所示:

beaconManager = BeaconManager.getInstanceForApplication(mContext);

beaconManager.getBeaconParsers().clear();
beaconManager.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("...")); 

beaconManager.setForegroundScanPeriod(3000);
beaconManager.setBackgroundBetweenScanPeriod(3000);
BeaconManager.setRegionExitPeriod(11000L);
backgroundPowerSaver = new BackgroundPowerSaver(mContext);
beaconManager.bind(this);
我不确定仅仅因为
服务A
正在前台运行,beacon manager是否也在运行?我确实设置了
setForegroundScanPeriod
,但我没有调用
enableForegroundServiceScanning
这有多重要?有没有办法让我知道beaconManager是在后台运行还是在前台运行(服务)?我应该如何更改我的代码以确保扫描在前台(我需要有什么额外的代码)?也许我应该将我的
b管理者
服务A
拆分为其他备选方案(提示和理由,说明为什么这种方法会更好)


如果可能的话,我会尝试生成日志文件,但到目前为止,从代码的角度来看,可能还有一些事情要做(很容易看出实现中存在很大问题)。

问题中显示的代码无法将库扫描作为前台服务。仅仅因为您创建了自己的前台服务,并不意味着库使用它来安排扫描

默认情况下,在Android 8+上,该库使用作业调度程序在后台每15分钟运行一次扫描。前台服务替代方案要求启用库自己的扫描服务,并将其配置为前台服务。这确实需要调用
enableForegroundServiceScanning
,但设置它需要的不仅仅是这些

该库有一个页面,介绍如何将其配置为前台服务。您也可以在图书馆的


我建议您只需复制该设置代码即可使其正常工作。

问题中显示的代码无法将库扫描作为前台服务。仅仅因为您创建了自己的前台服务,并不意味着库使用它来安排扫描

默认情况下,在Android 8+上,该库使用作业调度程序在后台每15分钟运行一次扫描。前台服务替代方案要求启用库自己的扫描服务,并将其配置为前台服务。这确实需要调用
enableForegroundServiceScanning
,但设置它需要的不仅仅是这些

该库有一个页面,介绍如何将其配置为前台服务。您也可以在图书馆的


我建议您只需复制设置代码即可正常工作。

谢谢您的回答。是否可以保留我自己的前台服务,但另外添加示例中前台服务扫描所需的额外代码,或者我应该扩展示例中显示的应用程序类?另外,是否有一种简单的方法来测试我的新前台实现是否正确(除了通知之外)?欢迎您保留自己的前台服务。在Android上,您可以拥有一个由多个前台服务共享的可见通知。如果您希望从前台服务启动库的前台服务,也可以这样做,尽管这会增加复杂性。如果你的前台服务由于某种原因没有启动,很明显信标扫描也不会启动。谢谢你的回答。是否可以保留我自己的前台服务,但另外添加示例中前台服务扫描所需的额外代码,或者我应该扩展示例中显示的应用程序类?另外,是否有一种简单的方法来测试我的新前台实现是否正确(除了通知之外)?欢迎您保留自己的前台服务。在Android上,您可以拥有一个由多个前台服务共享的可见通知。如果您希望从前台服务启动库的前台服务,也可以这样做,尽管这会增加复杂性。如果您的前台服务由于某种原因没有启动,显然信标扫描也不会启动。