根据当前位置从监控中删除 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];
然后,您将如下所示的方法添加到 CLLocationManager
的 delegate
中,以便在每次用户显着更改位置时获得回调:
- (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
所以我一直在寻找一种方法,根据它离我当前位置的距离,从受监控区域中删除 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];
然后,您将如下所示的方法添加到 CLLocationManager
的 delegate
中,以便在每次用户显着更改位置时获得回调:
- (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