locationmanager didenterregion 没有被调用

Posted

技术标签:

【中文标题】locationmanager didenterregion 没有被调用【英文标题】:locationmanager didenterregion doesn't get called 【发布时间】:2014-08-11 22:00:21 【问题描述】:

假设我的代码如下所示:

- (void)locationManager:(CLLocationManager *)manager
        didRangeBeacons:(NSArray *)beacons
               inRegion:(CLBeaconRegion *)region 
    //Handle beacons found during ranging



-(void)initBeaconRegion


    NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"];

    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID major:345 minor:678 identifier:@"MyBeaconIdentifier"];
    self.beaconRegion.notifyEntryStateOnDisplay = NO; //Used for Monitoring
    self.beaconRegion.notifyOnEntry = YES; //Used for Monitoring
    self.beaconRegion.notifyOnExit = YES; //Used for Monitoring


- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 

    if ([region isKindOfClass:[CLBeaconRegion class]]) 
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;

        //now start ranging
//        [_locationManager startRangingBeaconsInRegion:beaconRegion];
    

- (void)viewDidLoad 
    [super viewDidLoad];
    self.locationManager = [[CLLocationManager alloc] init];
    [self initBeaconRegion];
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
    NSLog(@"monitored regions %@",self.locationManager.monitoredRegions);

一些 iPad 应用程序称为 xBeacon 广告具有相同的 UUID,主要和次要,这不起作用。我究竟做错了什么?我应该使用应用程序接近广告设备,还是等待更长时间?

对 Estimote 信标应用进行了同样的尝试,这两个应用都可以正常工作,因为我在 Mac 上的 Beacon Scanner 上进行了检查。

【问题讨论】:

【参考方案1】:

您希望调用信标监控回调,但您并未开始监控——您正在开始测距。尝试更改此行:

   [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];

到:

   [self.locationManager startMonitoringRegion:self.beaconRegion];

另外,您需要按照@luca-corti 的建议设置self.locationManager.delegate = self

如果您仍然没有收到回调,请尝试使用我的Locate app 来验证您的测试信标实际上是在使用您期望的标识符进行传输。

【讨论】:

startMonitoringBeaconsInRegion 不走运(Xcode 中没有声明的选择器),但是您的应用可以正确看到它 另外,请仔细检查您的信标标识符并确保它们完全正确。如果您收到空测距回调,则表示您的应用没有看到信标。【参考方案2】:

您需要在实例化CLLocationManager 后设置self.locationManager.delegate = self。否则委托将不起作用。

【讨论】:

谢谢。现在 didRangeBeacons 一直被调用,但是设置了空的信标。 就是这样。接受答案,欢迎来到 ***。我可能建议阅读 CLLocationmanager 文档以了解您需要调用哪些方法来满足您的需求。

以上是关于locationmanager didenterregion 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 使用 Wi-Fi 总是返回 false

我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?

locationManager.getLastKnownLocation() 返回 null

为啥 LocationManager 没有 lastKnown 位置?

不适用于 Android Studio-locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this)

locationManager.getBestProvider 返回 null