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

时间:2015-05-17 19:39:14

标签: ios geolocation cllocationmanager ibeacon clbeaconregion

所以我一直在寻找一种方法来从受监控区域中移除BeaconRegion,具体取决于它与当前位置的距离。 我虽然可以使用中心属性,但我认为我遗漏了一些东西......因为纬度/经度值无效......

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

如何根据con currentLocation删除BeaconRegion?

2 个答案:

答案 0 :(得分:1)

CLBeaconRegion表示具有相同uuid的N个蓝牙信标。 ibeacon没有gps坐标。它具有RSSI值(信号强度)和“计算的”邻近属性但没有位置。

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

在IOS上,CLBeaconRegion类只有一个center属性,因为它是CLRegion的子类

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

答案 1 :(得分:1)

是的,您可以停止监控CLBeaconRegion,具体取决于用户的位置。但是,正如您所发现的那样,center属性对象不会帮助你做到这一点(请参阅@ Daij-Djan的答案,了解原因。)

您想要的典型方法是在设置信标监控的同时使用CLLocationManager设置接收重要的位置更改,如下所示:

[locationManager startMonitoringSignificantLocationChanges];

然后,您可以在delegate CLLocationManager的{​​{1}}添加以下方法,以便每当用户更改位置时都会收到回调:

- (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     
   }
}

请注意,您还需要确保为您的应用授权位置服务才能使其正常工作,并在plist中添加与NSLocationAlwaysUsageDescription键对应的字符串,但这与您需要执行的检查相同无论如何监视信标:

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

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