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

Posted

技术标签:

【中文标题】在 Android 8 之前的应用程序重新启动后,AltBeacon 未检测到 iBeacon【英文标题】:AltBeacon not detecting iBeacon after app restart on Android pre-8 【发布时间】:2018-06-18 13:17:50 【问题描述】:

我将 AltBeacon 与 iBeacon 的自定义解析器一起使用。我有一个实现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 中的“正在运行的应用程序”屏幕向右滑动退出应用程序,则应用程序将重新启动并且信标检测继续 - 但仅适用于默认的 AltBeacon 类型,而不适用于 iBeacons。似乎自定义信标设置正在丢失,可能是因为该设置未同步到 AltBeacon 服务。我尝试在调用addRegion 时添加 iBeacon 解析器,但没有成功。唯一对我有用的是修改 AltBeacon 的本地副本,使其默认为 iBeacon。

应用重启后,任何人使用自定义解析器成功了吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于在 Android 8 之前的应用程序重新启动后,AltBeacon 未检测到 iBeacon的主要内容,如果未能解决你的问题,请参考以下文章

Android 8.1(API 27) - 重启后键盘未在Kiosk模式应用中显示

Android:应用程序重新启动后,保存在 getFilesDir() 中的文件消失

设备重新启动后,地理围栏是不是在 android 中保持活动状态

Android 警报管理器在重新启动设备或从后台杀死应用程序后取消

在 Android 应用中重新启动后尝试打开文件夹时出现权限错误

Android O: init进程启动流程分析(阶段一)