android - 除非在区域设置中指定,否则不会检测 iBeacon 的主要/次要
问题描述
我正在努力解决的问题相当简单——我知道我正在使用的 iBeacons 的 uuid,但主要/次要参数不是预设的,即它们可能会动态变化。我想要实现的是能够在BeaconManager
调用MonitorNotifier
的方法时获得主要/次要的当前值。出于某种原因,如果 Region 仅使用 uuid 构建,它不会传递主要/次要MonitorNotifier
,例如:
val region = Region(uuid.toString(), Identifier.fromUuid(uuid));
我与通过本机 iOS API 使用 iBeacon 的 iOS 开发人员进行了交谈,他说 iOS 上的行为完全相同 - 主要/次要不是通过监视提供的,除非他指定要搜索的确切值。
主要/次要可以通过测距来检测,但我想继续使用监控是有原因的(不要深入细节 - 使用didEnter
,didExit
和didDetermineStateForRegion
方法更容易)。
有什么我可能会丢失的吗?
解决方案
您对信标监控 API 工作原理的描述是准确的。它在 iOS CoreLocation 和 Android Beacon Library 上都是一样的。
我是在 Android 信标库上设计此 API 的人。它之所以这样工作,是因为我希望它可以轻松构建跨平台应用程序,因此我将其与 iOS 相同。
iOS 以这种方式工作的原因是因为 Apple 在其预先存在的 Geofence Region API 上对其进行了建模,该 API 还会告诉您何时进入或退出,但不会为您提供有关导致进入或退出的细节的更多详细信息。
您当然可以争论不同的 API 是否会更好。不幸的是,在使用 SDK 时,您必须按原样接受 API。另一种方法是构建自己的。
如果您真的想要检测到特定信标/信标不再检测到事件的事件回调,您可以轻松地在 Ranging API 之上构建它。只需跟踪所有可见信标的列表,当找到新信标时,触发 didStertDetectingBeacon 事件。然后,如果 10 秒后在测距回调中没有看到它,则触发 didStopDetectingBeacon 回调。
推荐阅读
- c# - 如何在 Blazor 中使用来自 API 的数据 json 填充列表 C#?
- django - Django Send Mail 功能无法处理补丁请求
- angular - Angular - onFocus 功能不适用于标签输入
- javascript - 使用自定义格式响应 Antd DatePicker 用于输入和显示
- html - Angular - 动态填充表格
- r - 如何编写嵌套的 IF 和 RAND excel 语句
- python - 无法使用 python url 中的请求下载图像向我发送响应中的 html?
- angularjs - Angular 7中的Angularjs框架使用
- android - Android翻译动画第二次不同
- python - python37.dll 未在可执行文件中链接