停止测距信标区域

Posted

技术标签:

【中文标题】停止测距信标区域【英文标题】:stop ranging beacon region 【发布时间】:2014-10-08 13:43:37 【问题描述】:

我正在开发一个具有游览模式选项的信标应用程序。因此,当用户点击开关打开游览时,我正在创建信标区域并使用以下代码监听信标

NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:beacon.beaconID];
CLBeaconRegion *region  = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:[beacon.major integerValue] minor:[beacon.minor integerValue] identifier:beacon.identifier];

[self.locationManager startMonitoringForRegion:region];
region.notifyEntryStateOnDisplay = YES;      
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
[self.locationManager startRangingBeaconsInRegion:region];

现在要停止测距,我知道我必须使用

    [self.locationManager stopRangingBeaconsInRegion:region];

但是如何获得相同的 CLBeaconRegion 创建用于监控?我应该将 CLBeaconRegion 保存在数组中吗?

【问题讨论】:

【参考方案1】:

CLLocationManager 有一个名为rangedRegions 的属性,它是当前范围内所有区域的NSSet。因此,如果您执行以下操作:

for (CLBeaconRegion *region in self.locationManager.rangedRegions) 
    [self.locationManager stopRangingBeaconsInRegion:region];

如果您想停止对所有区域进行测距。

【讨论】:

【参考方案2】:

让我告诉你我们如何首先确定所有可用信标的范围,然后如何监控特定的信标。

    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:beacon.beaconID];

    CLBeaconRegion *region  = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:beacon.identifier];

    [self.locationManager startRangingBeaconsInRegion:region];

这将为您提供 Range 中与 uuid 匹配的所有可用信标。

然后你需要开始监控特定的信标。(比如信标)

     CLBeaconRegion *region  = [[CLBeaconRegion alloc] initWithProximityUUID:beacon.uuid major:[beacon.major integerValue] minor:[beacon.minor integerValue] identifier:beacon.identifier];

     [self.locationManager startMonitoringForRegion:region];

     region.notifyEntryStateOnDisplay = YES;      
     region.notifyOnEntry = YES;
     region.notifyOnExit = YES;

当您从信标区域进出时,这会通知您

如果你还需要什么,请告诉我

【讨论】:

以上是关于停止测距信标区域的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在后台监控/测距信标会消耗大量电池

从 iBeacon 接近控制视图

在对iBeacons进行测距和监控之后,蓝牙设备无法连接,直到重置蓝牙

CLLocationManager didRangeBeacons 停止在前台工作

ios 7.1 上的 ibeacon - 应用程序在一段时间后停止收听信标

是否在相同的 BLE 扫描中收到信标监视和测距回调