首页 文章

在Android 8之前的应用程序重启后,AltBeacon未检测到iBeacon

提问于
浏览
1

我正在使用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")
}

我已经覆盖了 didEnterRegiondidExitRegion ,如果应用程序位于前台或后台,则所有工作正常 . 如果我从Android的"running apps"屏幕右侧滑动退出应用程序,那么应用程序将重新启动并继续进行信标检测 - 但仅限于默认的AltBeacon类型,而不是iBeacons . 似乎自定义信标设置正在丢失,可能是因为该设置未同步到AltBeacon服务 . 我在调用 addRegion 时尝试添加iBeacon解析器,但没有成功 . 唯一对我有用的是修改AltBeacon的本地副本,使其默认为iBeacon .

应用程序重启后,任何人都成功使用自定义解析器?

1 回答

  • 0

    问题可能是你的service.never在杀死应用程序后开始,因此,当库唤醒使用JobScheduler进行扫描时,BeaconParser永远不会被设置 .

    简单的解决方案是将BeaconParser设置为自定义Application类的onCreate方法 . 这总是在应用程序启动时执行,即使启动只是基于JobScheduler进行扫描 .

相关问题