【问题标题】:didRangeBeacon called without any beacons found在没有找到任何信标的情况下调用了 didRangeBeacon
【发布时间】:2014-12-13 06:39:22
【问题描述】:

我注册了自己的位置管理器来监控和测距一些信标:

[self.locationManager startMonitoringForRegion:region];
[self.locationManager startRangingBeaconsInRegion:region];

我的理解是,当找到一个或多个信标时,会调用此委托方法:

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region

当我打开我的信标时,确实调用了这个委托方法,但是信标数组是空的。我的信标没有在该数组中列出有什么原因吗?

这里有一个截图来说明这种情况:


其他注意事项:

  • 我使用MacBeacon 来传输我的信标信号。稍后我会尝试使用真正的信标,但 MacBeacon 在 iOS 7 中对我来说工作正常。
  • 我尝试延迟测距,直到我得到 didEnterRegion:didDetermineState: 被调用,但这仍然会导致同样的事情。
  • 我已向我的位置经理申请位置权限:[self.locationManager requestWhenInUseAuthorization];
  • 我有一个非常相似的代码,在 Xcode 5/iOS 7 SDK 中编译得很好。这是特定的 Xcode 6/iOS 8 行为吗?
  • 我已在我的 plist 中添加了 NSLocationWhenInUseUsageDescription 键。

【问题讨论】:

  • MacBeacon 使用的桌面操作系统版本是什么?
  • @davidgyoung 我正在使用 Mavericks,10.9.4。
  • 你的笔记帮助了我! :) 我不得不把 [self.locationManager requestWhenInUseAuthorization];

标签: ios ios8 core-location cllocationmanager ibeacon


【解决方案1】:

尝试在您的 iOS 8 设备上使用Locate app,并验证您是否看到了信标。确保您已将信标的 UUID 正确配置到定位应用中。

如果您确实在 Locate 上看到它,那么我怀疑问题是在 iOS 8 上未正确授予您的应用程序权限。在这种情况下,您可能应该发布一个代码 sn-p 显示您调用 @ 的位置987654322@ 并且还包括您的 plist 文件的一部分,该部分需要具有以下内容:

<key>NSLocationWhenInUseUsageDescription</key> <string>Need to use location services</string>

【讨论】:

  • 是的,从定位应用程序(以及其他信标应用程序实际上)可以看到信标。我还在我的 plist 中添加了它,抱歉我忘了提及它。您还有其他想法吗?
  • 你真的得到权限提示了吗?尝试卸载并重新安装您的 asp 以进行验证。
  • 是的,我做到了,我重新安装了它。我实际上取出了我的代码并将其粘贴到一个示例项目中,它现在可以工作了。唯一的区别是我对 UUID、major 和 minor 进行了硬编码。所以我认为这可能与我监控超过 1 个信标代码有关。
  • 非常感谢您的帮助,我找到了问题所在。显然,在创建多个区域时,我无法在 CLBeaconRegion 中重用标识符。我需要创建唯一标识符。非常感谢大卫。
  • 是的,没错。区域标识符必须是唯一的,否则具有相同标识符的第二个区域将替换第一个。
【解决方案2】:

原来这是因为我在创建 CLBeaconRegion 时没有使用唯一标识符。

特别感谢 nayoso 帮我解决这个问题。

【讨论】:

  • 你能扩展一下吗?您的意思是您传递的“标识符”属性在您的应用程序的上下文中不是唯一的,或者不是 NSUUID 对象?
  • @MickByrne 我的意思是当你像这样创建 CLRegion 时:initWithProximityUUID: identifier:,确保第二个参数(标识符)是唯一的。
  • 我也有同样的问题。你到底做了什么让它工作?这就是我在 Swift 中定义我的区域的方式:let myRegion = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "B9407F30-F5F8-466E-AFF9-25556B57FE6D")!, identifier: "dhajhdjsahdjsahdjkah")
  • @BartłomiejSemańczyk 你还有其他地区的标识符为“dhajhdjsahdjsahdjkah”吗?如果您在循环中执行此操作,请将其从循环中取出,或创建唯一标识符。
  • 不,这是唯一的标识符。我想我有一个错误的UUID,现在他们不是默认的,因为他们可能已经改变了。
【解决方案3】:

你要先启动beacon监控,还要设置notifyEntryStateOnDisplay = YES

self.region1.notifyEntryStateOnDisplay = YES;
[theLocManager startMonitoringForRegion: region1];
[theLocManager startRangingBeaconsInRegion: region1];

该代码在 iOS 8 中也适用于我。

【讨论】:

    【解决方案4】:

    当我使用主要和次要作为参数创建 CLBeaconRegion 时,我实际上遇到了这个问题。如果您创建具有主要和次要参数的信标区域并且没有任何具有这些主要和次要参数的信标,则信标列表将为空。就我而言,我想动态确定主要/次要。一旦我只使用 UUID 和标识符初始化 CLBeaconRegion,一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2019-10-24
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多