在使用信标(iOS设备)进行测试时,我发现侦听器信标会发出一些意外行为。即使信标进入某个区域,也不会调用 locationManager:didEnterRegion 方法。但正确调用 locationManager:didRangeBeacons:inRegion:,并在那里显示检测到的信标。有没有人经历过这样的事情。
答案 0 :(得分:32)
检查您的方法是否以下列方式实施。
在viewDidLoad
中,最后开始监控
self.beaconRegion.notifyOnEntry=YES;
self.beaconRegion.notifyOnExit=YES;
self.beaconRegion.notifyEntryStateOnDisplay=YES;
[self.locationManager startMonitoringForRegion:self.beaconRegion];
监控开始后,请求您所定义区域的状态
- (void) locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
[self.locationManager requestStateForRegion:self.beaconRegion];
}
确定状态后,启动测距信标
-(void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if (state == CLRegionStateInside)
{
//Start Ranging
[manager startRangingBeaconsInRegion:self.beaconRegion];
}
else
{
//Stop Ranging here
}
}
根据您的需要实施以下方法......
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
self.statusLbl.text=@"Entered region";
}
-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
self.statusLbl.text=@"Exited region";
}
-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
{
if(beacons.count>0)
{}
}
希望这能解决您的问题。
答案 1 :(得分:12)
before starting coding in project , you must follow given setup guidlines -->
1. in project info or info.plist -->
Custom IOS Target Properties -->
. add "Required background modes"
. in this add two items -->
."App shares data using CoreBluetooth"
."App registers for location updates"
2. in project Capability -->
There is Background Modes
. check "Loaction update"
. check "Acts as a Bluetooth LE accessory"
. check "uses bluetooth LE accessories"
(并按照Davidgyoung先生的指示行事。相信我,一定会有用。)
答案 2 :(得分:7)
如果没有关于测试开始条件的更多细节,我很难说我是否看到过完全相同的东西。但是,是的,在某些特定情况下,我已经看到了locationManager:didRangeBeacons:即使没有调用locationManager,也会调用inRegion:didEnterRegion。
如果您使用相同的区域同时开始测距和监控,并且iOS认为您已经已经在受监控的区域中,那么您可能无法调用locationManager:didEnterRegion。
要真正测试是否有问题,您需要设置一个测试用例:
如果在完成上述操作后仍然没有接到电话,那么肯定是错误的。
答案 3 :(得分:6)
您还需要注意,您正在监控区域 - 而不是特定的信标。
因此,如果您有3个信标共享相同的proximityUUID
且您的区域仅定义为proximityUUID
(没有主要和次要值),则只会在以下两种情况下收到通知:
该区域没有信标在范围内,第一个信标/信标得到
发现(didEnterRegion:
)
来自该地区的一个或多个信标都在范围内,它们全都不见了
~30秒(didExitRegion:
)