我遇到了关于iBeacon的本教程(http://www.appcoda.com/ios7-programming-ibeacons-tutorial/),我觉得这很有趣。我已经下载了他们的源代码并且能够运行良好。
无论如何,我注意到一件奇怪的事情。有时,当我首先运行广播器而不是接收器时,接收器似乎无法检测到任何信标,但如果我先运行接收器,则只能检测到信标。
我已经尝试过研究其他方面,但iBeacon似乎是一项新技术,并没有太多参考资料。你们中的任何人都可以把这些iBeacon的东西搞得一团糟,这可以解释这个间歇性问题吗?
非常感谢您的帮助。
答案 0 :(得分:4)
您所看到的问题是因为接收器应用只有在检测到您已进入某个区域时才会为信标启动“测距”。如果您首先启动广播公司,那么您已经已经在信标区域内,因此您的应用可能无法开始测距。文章中的这句话是线索:
信标的启动接收器应用程序并将其远离广播信标,然后走向它以模拟进入该区域。
监控意味着只有当您输入或退出您定义的区域时,才会通知您的应用。这个区域的半径可能达到约50米,所以如果你只是坐在接收器旁边,除非你关闭接收器再打开,否则你不应该触发其中一个事件。当应用程序在后台或前台运行时,可以进行监控。
区域中信标的 范围意味着应用程序将每秒通知,其中包含设备在指定区域中可以看到的所有信标的列表(已订购)按距离)。测距将调用locationManager:didRangeBeacons:inRegion:
代表的CLLocationManager
方法。当您在区域内/外移动并且与信标的距离发生变化时,信标列表将不断更新。当您的应用程序位于前台时,范围就会发生。
如果您希望该应用持续收听信标,请尝试拨打
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
在您的viewDidLoad:
中,而不是didEnterRegion:
方法。
答案 1 :(得分:1)
由于当前位置委托可用的方法。也可以添加此方法 -
- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
这将解决问题。