2013-03-29 32 views
0

我有一个应用程序,它使用CLLocationManager跟踪用户的路线,沿着所采取的路径绘制点。应用程序使用所需的背景模式>应用程序寄存器进行位置更新,并在后台运行CLLocationManager停在后台

据我所知,后台发生的任何事情都需要从locationManager:didUpdateToLocation:fromLocation调用,因为这是每次更新位置时调用的方法。

我遇到的问题是,有时这停止调用。当用户的位置在15分钟左右的空间内变化不大时,似乎会发生这种情况。据我所知,电话locationManager:didUpdateToLocation:fromLocation只是停止,大概是为了节省电池。不幸的是,当你回来时它不会再恢复。

我认为有没有办法来覆盖这种行为,所以我想使用通知中心通知用户该应用程序不再记录路线。问题是,应用程序如何知道这件事发生了?如果locationManager:didUpdateToLocation:fromLocation未被调用,我无法激发我的通知。如果它被调用,通知不应该触发。

+1

我有这个确切的问题。当用户在15分钟内没有移动,并且他在保持应用在后台时再次开始移动时,不会调用locationManager:didUpdateLocations。如果用户将应用程序放回到前台,那么调用locationManager:didUpdateLocations,但它不包含用户开始移动和将应用程序放在前台之间的所有之前的位置。 –

回答

1

我不认为有任何方法可以通知位置经理已经停止向您发送活动,但有一种方法可以防止它发生。在iOS 6中,添加了一项新功能,允许位置管理器在不认为正在使用的情况下关闭服务。如果你做到以下几点,位置管理器将继续向您发送事件背景,直到电池耗尽:

如果([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]){ 自我 。 locationManager.pausesLocationUpdatesAutomatically = NO; }

此外,在iOS6的,你应该使用locationManager:didUpdateLocations:作为locationManager:didUpdateToLocation:fromLocation:已被弃用。

+0

因此,当位置管理器检测到用户不移动时,它会暂停位置更新。当用户再次移动时,位置管理器恢复检测?但这只是当应用程序在前台。什么时候该应用程序在后台?根据我的经验,当地点经理暂停时,用户再次开始移动时不会恢复。 –

0

的2委托方法:

-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager 

-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager 

告诉你什么时候该位置更新停止和启动由于暂停。