ios的延迟位置更新问题



过去两天,我一直在尝试在应用程序中实现延迟位置更新。我面临的问题是

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

即使在我调用之后,方法也会被每秒调用

 [self.locMgr allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)200 timeout:(NSTimeInterval)25];

方法。

尽管我不得不说

 - (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error

在我的allowDeferredLocationUpdatesUntilTraveled方法指定的25秒后调用,错误代码为null。

我从文档中了解到,didUpdateLocations只应在25秒后调用。任何帮助都将不胜感激。

我一直在为同样的问题而挣扎,我可能已经找到了一个解决很多人这个问题的答案-至少它解决了我的问题,并使延迟更新始终为我工作。我遵循了上面列表中的所有步骤,无论我做了什么,位置更新都不会延迟。我突然想到,我可能运行了其他不允许系统睡眠的应用程序,所以我杀死了多任务托盘中的所有其他应用程序。我再次运行了我的示例应用程序。。。成功了!但故事并没有就此结束。我稍后再试了一次,尽管多任务托盘中没有其他应用程序运行,但我无法推迟定位服务。然后我突然想到,我的手机上有一个名为"Moves"的应用程序,即使你手动杀死它,它也能保持生命。我不完全确定当你杀死它时,Moves是如何神奇地复活的,但它确实复活了(也许使用蓝牙和应用程序保存/恢复服务)。即使它还活着并跟踪你的位置,它也不会出现在多任务托盘中。我认为只有手动启动的应用程序才会出现在托盘中——如果操作系统启动了一个应用程序,它就不会显示在托盘中。但我离题了。。。通过禁止Moves使用定位服务,我可以让延迟定位服务在我的应用程序中持续工作。当我这样做的时候,Moves抱怨道,尽管它不在多任务托盘中。似乎如果另一个应用程序正在使用定位服务(并且没有延迟),你的应用程序也不会延迟。

根据iOS 6.0 SDK的苹果开发者论坛,延迟位置更新仅可用:

  • 在iPhone 5硬件上
  • 运行iOS 6.0或更高版本
  • 所需精度设置为kCLLocationAccuracyBest
  • 调用"startUpdatingLocation"方法
  • 等待大约每秒1次的位置更新
  • 然后开始推迟更新

请参阅:https://devforums.apple.com/message/751974#751974

听起来你需要iPhone 5硬件,并等待1Hz的位置更新。

最新更新