2014-01-27 89 views
1

我遇到了关于我发现有趣的iBeacon的本教程(http://www.appcoda.com/ios7-programming-ibeacons-tutorial/)。我已经下载了它们的源代码并且能够很好地运行。iBeacon:无法检测到广播公司 - 间歇

无论如何,我注意到一件奇怪的事情。有时候,当我首先运行广播器而不是接收器时,接收器似乎无法检测到任何信标,但是如果我先运行接收器,那么只能检测到信标。

我已经试过寻找其他tuts,但iBeacon看起来像一种新技术,并没有太多的参考可以找到。能不能把你的手弄脏进入这个iBeacon的人,能够让你了解这个间歇性的问题吗?

非常感谢您的帮助。

回答

4

您看到的问题是因为如果接收器应用程序检测到您已输入区域,则它只会为信标启动“范围”。如果您首先启动广播公司,则您已在已在内的信标区域,因此您的应用程序可能无法启动测距。这篇文章中的句子是线索:

启动接收器应用程序并将其远离广播信标,然后朝它走向,以模拟进入该区域。

信标的监测意味着你的应用程序才会收到通知,当你进入退出你定义的区域。这个区域的半径可能高达50米,所以如果你只是坐在接收机旁边,除非关闭和重新打开接收机,否则不应触发其中一个事件。监控可以在应用程序在后台或前台运行时完成。

测距用于在区域的信标是指应用程序将与该设备可以在指定的区域(由距离排序)查看所有信标列表通知每秒一次。测距将调用您的CLLocationManager的代表的locationManager:didRangeBeacons:inRegion:方法。当您在区域内外移动时,信标列表将不断更新,并且您与信标的距离会发生变化。测距旨在发生,而你的应用程序在前台。

如果您想应用的信标,不断聆听,尝试调用

[self.locationManager startRangingBeaconsInRegion:self.beaconRegion]; 

viewDidLoad:,而不是在你的didEnterRegion:方法。

+0

酷!感谢解释以及配偶。它现在工作正常! – jason

+1

绝妙的答案。为你+1。 :) – Mani

1

由于当前位置委托可用的方法。加这个方法也是 -

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { 
     [self.locationManager startRangingBeaconsInRegion:self.beaconRegion]; 
} 

这样可以解决这个问题。

+0

谢谢rishi!这也适用:) – jason