0

我有一个应用程序用于CLLocationManager跟踪用户的路线,沿着所走的路径绘制点。该应用程序使用必需的后台模式在后台运行 > 应用程序注册位置更新。

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

我遇到的问题是,有时这会停止被调用。当用户的位置在大约 15 分钟左右的时间内没有太大变化时,似乎会发生这种情况。据我所知,呼叫locationManager:didUpdateToLocation:fromLocation只是停止,大概是为了节省电池。不幸的是,当您重新开始移动时,它不会再次恢复。

我认为无法覆盖此行为,因此我想使用通知中心通知用户该应用程序不再记录路线。问题是,应用程序如何知道发生了这种情况?如果locationManager:didUpdateToLocation:fromLocation未调用,我将无法触发通知。如果正在调用它,则不应触发通知。

4

2 回答 2

1

我认为没有任何方法可以通知位置管理器已停止向您发送事件,但有一种方法可以防止它发生。在 iOS 6 中,添加了一项新功能,允许位置管理器在认为服务未被使用时关闭服务。如果您执行以下操作,位置管理器将继续在后台向您发送事件,直到您的电池电量耗尽:

if ([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]) { self.locationManager.pausesLocationUpdatesAutomatically = NO; }

此外,在 iOS6 中,您应该使用locationManager:didUpdateLocations:as locationManager:didUpdateToLocation:fromLocation:is deprecated。

于 2013-04-15T12:10:13.467 回答
0

2个委托方法:

-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager

-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager

告诉您位置更新何时因暂停而停止和开始。

于 2013-07-09T21:12:50.540 回答