检测具有不同主要和次要值的 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的主要内容,如果未能解决你的问题,请参考以下文章
对于具有不同 UUID、major 和 minor 的多个 iBeacon,仅触发一次 didEnterRegion 事件