我是BLE Beacons的新手。
我有一个BLE设备,当我的移动应用程序中有新数据时,需要每隔一段时间进行更新,反之亦然-当BLE进行了应用程序应了解的事情时。
换句话说,BLE设备需要与移动应用程序“同步”。
如果用户打开应用程序,则BLE正在同步,并且一切都很好并且很有光泽。
但是我希望这种同步在后台进行,即使用户没有在1、2天甚至几周内都未打开应用程序,因此下次打开应用程序时,内部的BLE设备将已经有新数据应用程序,反之亦然-即使用户未打开应用程序,应用程序也会更新BLE以应对可能发生的事件(例如命令BLE在10分钟内闪烁颜色)。
我曾尝试将Android蓝牙库与RegionBootstrap结合使用,但对于在我的情况下监控是否可以继续使用,我感到困惑。
这是我的自定义应用程序onCreate()中的代码:
mBeaconManager = BeaconManager.getInstanceForApplication(this);
mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(IBEACON_PARSER_LAYOUT));
mBeaconManager.setRegionStatePersistenceEnabled(false);
mBeaconManager.setBackgroundBetweenScanPeriod(10000l);
mBeaconManager.setForegroundBetweenScanPeriod(10000l);
mBeaconManager.setBackgroundScanPeriod(1100l);
mBeaconManager.setForegroundScanPeriod(1100l);
region = new Region(getPackageName(),Identifier.parse(MY_BLE_BEACON_UID), null, null);
mRegionBootstrap = new RegionBootstrap(this, region);
这是我的触发事件:
@Override
public void didEnterRegion(Region region) {
Log.e(TAG, "didEnterRegion: ");
synchronizeBleWithTheApp();
playSoundEnterRegion();
}
@Override
public void didExitRegion(Region region) {
Log.e(TAG, "didExitRegion: ");
playSoundExitRegion();
}
private void synchronizeBleWithTheApp() {
// 1) Check if there is any new data the BLE is interested in, if yes the app should push it to the BLE in the background.
// 2) Check if there is any new data in the BLE the app is interested in, if yes fetch it from the BLE in the background.
}
我的问题是:
1)我是否应该在自己的情况下使用监视?我的意思是,即使设备每隔X分钟仍在该区域中,我也要继续尝试进行同步。 RegionBootstrap是否适合这种情况?
现在,didEnterRegion会被触发一次,并且在30秒钟之后,onExitRegion会被触发,即使BLE信标正在传输,这也让我感到困惑。
2)如果自定义Application类中的syncnizeBleWithTheApp()使用Activity MainActivity类中的代码,是否意味着我需要该应用打开该MainActivity?我还能在后台触发同步吗?
startRangingBeaconsInRegion(...)
回调中调用didDetermineStateForRegion
开始调整范围。您还可能需要前台服务,以使您的应用在Android 8+上在后台运行超过10分钟。该库使添加它变得容易,而无需编写自己的前台服务。请在此处查看库文档:https://altbeacon.github.io/android-beacon-library/foreground-service.html
[如果您在一段时间内在Android 7+上看到检测停止在后台(导致区域退出事件),则可能需要添加代码以强制进行长时间后台扫描:https://github.com/AltBeacon/android-beacon-library/pull/529
[最后,请注意中国OEM上的自定义应用杀手ers,这可能无法满足您对这些制造商生产的手机的要求。看到这里:http://www.davidgyoungtech.com/2019/04/30/the-rise-of-the-nasty-forks