我的任务是修复一些使用altbeacon和iBeacons的代码。 信标的检测在前景中很好,但在后台却不能。
在以前台模式扫描的Activity中,在进入后台时,onStop用于从beaconmanager取消绑定,然后在beaconBkgService中调用方法,如下所示:
活动代码:
public class beaconBkgService extends Application implements BootstrapNotifier {
public void startScanning() {
try {
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.setBackgroundBetweenScanPeriod(3000L);
mBeaconManager.setBackgroundScanPeriod(1000L);
mBeaconManager.setBackgroundMode(true);
if (mRegionBootstrap == null){
mAllBeaconsRegion = new ArrayList<Region>();
for (UserBeacons userBeacon : userBeacons) {
mBeaconsRegion = new Region(userBeacon.identifier, userBeacon.UUID, null, null);
mAllBeaconsRegion.add(mBeaconsRegion);
}
mRegionBootstrap = new RegionBootstrap(this, mAllBeaconsRegion);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
beaconBkgService代码:
var lat = $("#" + '<%= hvLatitude.ClientID %>');
var lng = $("#" + '<%= hvLongitude.ClientID %>');
...
在调用beaconBkgService.startScanning()之前,Activity onStop是否应该调用信标管理器unbind()?我曾经尝试过,但没有任何工作。
期望的结果是,当应用程序进入后台时,扫描应该每3秒持续1秒,但是当信标打开且应用程序处于后台时,beaconBkgService didEnterRegion不会触发。
当我开始工作时,如果Activity检测到前景中的信标,那么ExitRegion将如何生效,然后用户切换到后台并退出信标区域? beaconBkgService中的onExitRegion会激活吗?即使用RegionBootstrap从前台保留到背景的状态?
答案 0 :(得分:0)
ffprobe -v quiet -print_format json -show_format -show_streams video.mp4
和RegionBootstrap
并非设计用于Android BootstrapNotifier
。它们应该与Android Activity
类或Android应用生命周期中存在的其他对象一起使用。
了解在Android生命周期中,当用户在应用程序中导航时,会创建和销毁活动。尝试在Activity中进行长期信标扫描的任何代码都不起作用。
相反,应用程序对象是在用户首次启动应用程序时(或通过第一次信标检测自动启动应用程序时)创建的,并且继续存在。
修复此代码的最简单方法是重写它以使用Application
类。您可以在Android Beacon Library的示例代码中看到如何执行此操作的示例。请参阅此处的在后台启动应用部分:http://altbeacon.github.io/android-beacon-library/samples.html
您可能还想使用同一页面的自动省电示例代码部分中的代码。