所以我一直在寻找一种方法来从受监控区域中移除BeaconRegion,具体取决于它与当前位置的距离。 我虽然可以使用中心属性,但我认为我遗漏了一些东西......因为纬度/经度值无效......
po [region center]
(latitude = 0.0000000000000000000000000000000000000000000000000000000033891907065820605, longitude = 0.000000000000000000000000000000000000059293723668713039)
如何根据con currentLocation删除BeaconRegion?
答案 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