首页 > 解决方案 > 除非在区域设置中指定,否则不会检测 iBeacon 的主要/次要

问题描述

我正在努力解决的问题相当简单——我知道我正在使用的 iBeacons 的 uuid,但主要/次要参数不是预设的,即它们可能会动态变化。我想要实现的是能够在BeaconManager调用MonitorNotifier的方法时获得主要/次要的当前值。出于某种原因,如果 Region 仅使用 uuid 构建,它不会传递主要/次要MonitorNotifier,例如:

val region = Region(uuid.toString(), Identifier.fromUuid(uuid));

我与通过本机 iOS API 使用 iBeacon 的 iOS 开发人员进行了交谈,他说 iOS 上的行为完全相同 - 主要/次要不是通过监视提供的,除非他指定要搜索的确切值。

主要/次要可以通过测距来检测,但我想继续使用监控是有原因的(不要深入细节 - 使用didEnter,didExitdidDetermineStateForRegion方法更容易)。

有什么我可能会丢失的吗?

标签: androidibeaconaltbeacon

解决方案


您对信标监控 API 工作原理的描述是准确的。它在 iOS CoreLocation 和 Android Beacon Library 上都是一样的。

我是在 Android 信标库上设计此 API 的人。它之所以这样工作,是因为我希望它可以轻松构建跨平台应用程序,因此我将其与 iOS 相同。

iOS 以这种方式工作的原因是因为 Apple 在其预先存在的 Geofence Region API 上对其进行了建模,该 API 还会告诉您何时进入或退出,但不会为您提供有关导致进入或退出的细节的更多详细信息。

您当然可以争论不同的 API 是否会更好。不幸的是,在使用 SDK 时,您必须按原样接受 API。另一种方法是构建自己的。

如果您真的想要检测到特定信标/信标不再检测到事件的事件回调,您可以轻松地在 Ranging API 之上构建它。只需跟踪所有可见信标的列表,当找到新信标时,触发 didStertDetectingBeacon 事件。然后,如果 10 秒后在测距回调中没有看到它,则触发 didStopDetectingBeacon 回调。


推荐阅读