即使调用了 didDetermineState,也没有调用 didrangebeacons

Posted

技术标签:

【中文标题】即使调用了 didDetermineState,也没有调用 didrangebeacons【英文标题】:didrangebeacons not called even though didDetermineState is called 【发布时间】:2015-04-29 07:21:25 【问题描述】:

我有一组 Estimote 信标。当我使用 estimote sdk 时,我可以为信标设置范围并使用它。但问题是,当我使用ios SDK进行监控测距时,根本没有调用didRangeBeacons。

我已经开始测距,如下所示。当我使用断点检查时,该函数被调用。

- (void) locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region

    switch (state) 
        case CLRegionStateInside:
            [self.beaconManager startRangingBeaconsInRegion:self.beaconRegion];
            NSLog(@"Region CLRegionStateInside");

【问题讨论】:

【参考方案1】:

请确保您已完成以下清单:

    您已在 info.plist 中输入 NSLocationAlwaysUsageDescription

    您的属性 self.beaconRegion 是一个 CLBeacon 区域,其 UUID 与您要检测的 UUID 匹配。

    您的设备是 iPhone 4S 或更新版本,运行 iOS 7 或更高版本,并且开启了蓝牙

我会将代码更改为如下所示:

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(nonnull CLRegion *)region 
    CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
            if (beaconRegion.major && beaconRegion.minor) 
             else 
                switch (state) 
                    case CLRegionStateUnknown:
                        // Handle this case when bluetooth is off.
                        break;
                    case CLRegionStateInside:
                        NSLog(@"Inside %@", region);
                        if (![self.locationManager.rangedRegions containsObject:beaconRegion]) 
                            [self.locationManager startRangingBeaconsInRegion:[[CLBeaconRegion alloc] initWithProximityUUID:beaconRegion.proximityUUID identifier:beaconRegion.proximityUUID.UUIDString]];
                        
                        break;
                case CLRegionStateOutside:
                    NSLog(@"Outside %@", region);
                    break;
            
        
    

您只需要在 UUID 上进行范围,因为这将拾取与该 UUID 匹配的所有信标,而不管主要和次要。另请注意,如果您尚未进行测距,则应仅尝试开始测距以避免额外的函数调用

【讨论】:

以上是关于即使调用了 didDetermineState,也没有调用 didrangebeacons的主要内容,如果未能解决你的问题,请参考以下文章

了解 iOS 中的 iBeacons:didDetermineState 和 didEnterRegion 事件

即使更新了内容的情节提要,通知内容也不会被调用

即使调用了 removeAllChildren,SpriteKit 中的内存也会增加

即使从主线程调用更新,UI 也不会更新

即使在 [[UIPickerView alloc] init] 之后设置了委托,也没有调用 UIPickerView 委托方法

找不到盒子。您是不是忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子