17

在使用信标(iOS 设备)进行测试时,我发现侦听器信标出现了一些意外行为。即使信标进入区域,也不会调用locationManager:didEnterRegion方法。但是locationManager:didRangeBeacons:inRegion:被正确调用,并且检测到的信标显示在那里。有没有人经历过这样的事情。

4

4 回答 4

33

检查您的方法是否以以下方式实现。中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)
    {}
}

希望这能解决您的问题。

于 2013-12-27T06:19:42.370 回答
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 先生的指示进行操作。相信我,它一定会奏效的。)

于 2014-02-17T06:09:39.007 回答
8

您还需要知道您正在监视一个区域- 而不是特定的信标。

因此,如果您有 3 个共享相同的信标,proximityUUID并且您的区域被定义为 only proximityUUID(没有主要和次要值),您只会在两种情况下收到通知:

  1. 范围内没有来自该区域的信标,并且发现了第一个信标/信标 ( didEnterRegion:)

  2. 该地区的一个或多个信标在范围内,它们都消失了约 30 秒 ( didExitRegion:)

于 2014-05-07T17:18:03.887 回答
7

如果没有关于您的测试开始条件的更多细节,很难说我是否看到了完全相同的东西。但是,是的,在某些特定情况下,我看到即使没有调用 locationManager:didEnterRegion,也会调用 locationManager:didRangeBeacons:inRegion。

如果您在同一区域同时开始测距和监控,并且 iOS 认为您已经在监控区域中,那么您可能不会收到对 locationManager:didEnterRegion 的调用。

要真正测试是否有问题,您需要设置一个测试用例:

  1. 确保您不在该地区。
  2. 让 iOS 运行几分钟
  3. 开始监视该区域
  4. 让iOS继续运行几分钟
  5. 输入地区。
  6. 看看你是否接到了 locationManager:didEnterRegion 的电话

如果您在经过上述操作后仍然没有接到电话,那么肯定有问题。

于 2013-10-09T01:47:28.097 回答