我正在尝试制作一个基于位置的应用程序,它需要在打开后不断更新位置。我一直在寻找一种在应用程序关闭时将位置保留在后台的方法,但我发现这不是最好的方法,因为它会很快耗尽任何iPhone的电池。
长话短说,据我所知,我发现“区域监控”与苹果应用程序的“提醒”是一样的,这些提醒也可以与位置一起工作。然后我使用这个选项来测试我的应用程序,我意识到在模拟器中“从不”进入方法"didEnterRegion“,尽管它是正确创建的:
-(void) locationManager: (CLLocationManager *) manager didEnterRegion: (CLRegion *) region
{
NSLog (@ "entering the region");
CLLocation * location1 = manager.location;
CLLocation * location2 = [[CLLocation alloc] initWithLatitude: latitud.doubleValue longitude: longitud.doubleValue];
}我终于意识到这个方法被调用了,但只有当我离开了大部分区域并回到该区域时,才表明它不起作用,因为我已经在那个位置(所有这些都在模拟器中),奇怪的是它不是,模拟器的位置离要监控的区域有几英里远!这导致我认为这是准确性的问题,尽管创建半径为50或100米的区域是在传播3或4公里,所以我是无用的。
有没有经历过这种情况的人知道iOS 6模拟器是否有这个错误或者精度问题?我还没有开发者许可证来直接在我的iPhone上测试它,我也不想购买它,因为我的应用程序还远远没有完成,我很感谢在这个话题上的任何帮助。
提前谢谢。
发布于 2013-03-07 03:59:31
我建议做实际的地面测试。根据测试地点的不同,区域监测精度会有很大差异。
第二种选择是使用区域监控,只需唤醒应用程序并启动标准位置服务。要做到这一点,你需要在后台运行应用程序的权限。苹果可能不会批准这一点。我们的应用程序使用这种方法被拒绝了。
发布于 2014-04-14 11:28:24
DidEnterRegion和ExitRegion不是很准确。大约+,- 150m精度。
但是-(空) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)位置非常准确。使用此功能可找出您的区域是否具有坐标/当前位置
CLLocation *currentLocation = [locations lastObject];
if ([self.ARegionYouSetBeforeHand containsCoordinate:currentLocation.coordinate])
{
//you arrived at this region!!
}发布于 2012-12-21 14:35:56
区域监控(通常)的工作基础与“重要位置变化”位置服务相同。也就是说,它使用手机发射塔的位置;Apple建议你通常可以预期精度在1公里左右,但警告说,实际精度将随着你所在地区的手机发射塔密度的不同而不同。您可以在WWDC videos on Core Location中找到有关此主题的更多背景信息。
这可能是可行的--我还没有尝试过--使用区域监控来(唤醒你的应用程序并)获得用户位置的大致猜测,然后在CLLocationManager中使用更高精度的模式来获得更精确的修复。
https://stackoverflow.com/questions/13984505
复制相似问题