根据当前位置从监控中删除 CLBeaconRegion

Remove CLBeaconRegion from monitoring depending on current location

所以我一直在寻找一种方法,根据它离我当前位置的距离,从受监控区域中删除 BeaconRegion。 我虽然可以使用中心 属性,但我想我遗漏了一些东西...因为 latitude/longitude 值好像无效...

po [region center]
(latitude = 0.0000000000000000000000000000000000000000000000000000000033891907065820605, longitude = 0.000000000000000000000000000000000000059293723668713039) 

如何根据 con currentLocation 删除 BeaconRegion?

一个CLBeaconRegion代表N个具有相同uuid的蓝牙信标。 ibeacon 没有 gps 坐标。它有一个 RSSI 值(信号强度)和一个 'calculated' 接近度 属性 但没有位置。

与 wifi 路由器相同 ;) 有将 beacons/wifi 路由器与 GPS 位置相关联的服务,但这不是标准的。信标应该怎么知道? :)


在IOS上,CLBeaconRegionclass只有一个中心属性,因为它是CLRegion

的子class

如果您知道您所在地区的 GPS 位置使用该数据 + 您设备的位置

是的,您可以根据用户的位置停止监视 CLBeaconRegion 但是正如您所发现的,center 属性 这个对象不会帮助你做到这一点(有关原因的解释,请参阅@Daij-Djan 的回答。)

您想要的典型方法是在设置信标监控的同时使用 CLLocationManager 设置接收显着位置变化,就像这样:

[locationManager startMonitoringSignificantLocationChanges];

然后,您将如下所示的方法添加到 CLLocationManagerdelegate 中,以便在每次用户显着更改位置时获得回调:

- (void)locationManager:(CLLocationManager *)locationManager
      didUpdateLocations:(NSArray *)locations {
   CLLocation* location = [locations lastObject];
   NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
   // TODO: change the monitored beacon regions depending on the
   // location.coordinate.latitude and location.coordinate.longitude     
   }
}

请注意,您还需要确保您的应用已获得位置服务授权才能正常工作,并将与 NSLocationAlwaysUsageDescription 键对应的字符串放入您的 plist 中,但这与您需要进行的检查相同无论如何都要监视信标:

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}

有关重大位置更改的更多详细信息,请参阅此处:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html