我使用AltBeacon和iBeacons的自定义解析器。我有一个实现BootstrapNotifier
的服务,并在初始化期间设置自定义解析器:
const val IBEACON_LAYOUT = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"
val parser = BeaconParser().setBeaconLayout(IBEACON_LAYOUT)
BeaconManager.getInstanceForApplication(this).apply {
beaconParsers.clear()
beaconParsers.add(parser)
}
regionBootstrap = RegionBootstrap(this, monitoredRegions)
我按照以下方式添加要监控的区域:
fun addRegion(uuid: ByteArray, name: String) {
val region = Region(name, Identifier.fromBytes(uuid, 0, 16, false), null, null)
regionBootstrap?.addRegion(region)
Timber.d("Monitoring region $name")
}
我已覆盖didEnterRegion
和didExitRegion
,如果应用位于前台或后台,则一切正常。如果我通过直接从"正在运行的应用程序滑动退出应用程序" Android中的屏幕然后应用程序重新启动并继续信标检测 - 但仅限于默认的AltBeacon类型,而不是iBeacons。似乎自定义信标设置正在丢失,可能是因为该设置未同步到AltBeacon服务。我在调用addRegion
时尝试添加iBeacon解析器,但没有成功。唯一对我有用的是修改AltBeacon的本地副本,使其默认为iBeacon。
在重新启动应用后,任何人都可以成功使用自定义解析器吗?
答案 0 :(得分:0)
问题可能是你的service.never在杀死应用程序后开始,因此,当库唤醒使用JobScheduler进行扫描时,BeaconParser永远不会被设置。
简单的解决方案是将BeaconParser设置为自定义Application类的onCreate方法。即使启动只是基于JobScheduler进行扫描,这也会在应用启动时执行。