检测具有不同主要和次要值的 iBeacon

Posted

技术标签:

【中文标题】检测具有不同主要和次要值的 iBeacon【英文标题】:Detect iBeacon with different major and minor values 【发布时间】:2013-12-31 00:47:48 【问题描述】:

我现在正在尝试一个简单的测试。

设备 1:

作为信标,UUID:XXX-XXX-XXX 专业:1000 未成年人:1234

self.peripheralData = [MyRegion peripheralDataWithMeasuredPower:nil];
[self.peripheralManager startAdvertising:self.peripheralData];

设备 2:

充当具有 UUID 的区域的侦听器:XXX-XXX-XXX

locationManager startMonitoringForRegion:_region

设备 2 不检测设备 1。如果我编程监听区域为主要:1000 和次要:1234,它只会检测设备 1。

这听起来对吗?

假设我有 100 部手机充当信标,具有相同的 uuid 和标识符,但主要和次要值不同。而且我有 50 部手机充当特定 uuid 和 idenfitifer 的侦听器……我可以找到具有该 uuid 的所有信标并读取它们的主要和次要值吗?

我做错了什么?

【问题讨论】:

您能发布在两个设备上创建区域的代码吗? 当然。它只是使用 initwithuuid 主要和次要创建的 【参考方案1】:

当你初始化你的区域时,使用

region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifierString];

而不是类似的东西

region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:[major integerValue] minor:[minor integerValue] identifier:identifierString];

通过不指定主要和次要值,应检测具有匹配 UUID 的所有信标。它对我有用。

【讨论】:

如果我不指定主要和次要,我将如何准备它们? :-/ 您可以在创建信标时指定主要和次要,但对于检测信标的设备,创建用于监控的区域只会与您创建的一样具体。即,如果您指定 uuid、major 和 minor 它将寻找那个信标。如果您仅指定 uuid 和专业,它将查找与它们匹配的信标。并且仅指定 UUID 将检测具有该 UUID 的所有信标。 好的,它对我有用。我的错误是我重用了这些区域而不是创建新区域。【参考方案2】:

我认为你的问题的关键在于这条评论:

当然。它只是使用 initwithuuid major 和 minor – Legolas 创建的 昨天

创建信标区域有 3 种不同的调用:

initWithProximityUUID:identifier:

,

initWithProximityUUID:major:identifier:

initWithProximityUUID:major:minor:identifier:

如果要检测具有任何 UUID 的信标,则需要使用不指定主​​要或次要值的第一种形式。

然后您还需要调用 startRangingBeaconsInRegion: 并查看测距调用中返回的信标对象。

DidEnterRegion 调用仅包含主要或次要值(如果它们是区域的一部分)。

测距回调包括所有检测到的信标,包括它们的主要和次要值、距离和接近度等。

【讨论】:

没错。如果您需要具有不同 UUID、主要或次要的区域,则需要创建一个新区域。 UUID、主要和次要值都是信标区域的只读属性。【参考方案3】:

要消除代码中的问题,请尝试使用我在应用商店中的免费 Locate for iBeacon 应用程序执行完全相同的操作。尝试使发射器/探测器的一侧或两侧成为这个应用程序与您的自定义应用程序。

如果它在两侧都无法与 Locate for iBeacon 一起使用,则说明您的其中一台设备有问题。如果它在一侧与 Locate for iBeacon 一起工作,请为有问题的一侧发布您的代码。

【讨论】:

【参考方案4】:

您为位置管理器使用了哪些委托方法?有时如果您已经在该区域中,则不会调用 DidEnter,即您在启动正在执行监视的信标之前打开传输信标。如果是这种情况,请监控状态变化,你应该很好。

另外,我强烈推荐使用 David 的 Locate iBeacon 应用。它将真正加快您的开发过程。谢谢 D!

【讨论】:

以上是关于检测具有不同主要和次要值的 iBeacon的主要内容,如果未能解决你的问题,请参考以下文章

iBeacon 约束接受多个主要/次要

npm install 具有主要和次要版本依赖项

iBeacon 实施 - 用例

对于具有不同 UUID、major 和 minor 的多个 iBeacon,仅触发一次 didEnterRegion 事件

检测具有相同名称但不同值的 Angular 绑定的更改?

didEnterRegion 信标管理器方法返回一个主要和次要为零的区域